script example espaƱol ejemplos bash shell unix scripting ksh

bash - example - shell script unix



Bash o KornShell(ksh)? (13)

No soy nuevo en * nix, sin embargo últimamente he estado pasando mucho tiempo en el aviso. Mi pregunta es ¿cuáles son las ventajas de usar KornShell (ksh) o Bash Shell? ¿Dónde están los peligros de usar uno sobre el otro?

Buscando entender desde la perspectiva de un usuario, en lugar de puramente de secuencias de comandos.


@foxxtrot

En realidad, el shell estándar es Bourne shell ( sh ). /bin/sh en Linux es en realidad bash , pero si estás buscando scripts multiplataforma, es mejor que sigas las funciones del shell Bourne original o lo escribas en perl .


Bash es el punto de referencia, pero eso se debe principalmente a que puede estar razonablemente seguro de que está instalado en cada * nix que hay. Si planea distribuir las secuencias de comandos, use Bash.

Realmente no puedo abordar las diferencias reales de programación entre los proyectiles, desafortunadamente.


Disponible en la mayoría de los sistemas UNIX, ksh es compatible con estándares, está claramente diseñado y es completo. Creo que los libros, las ayudas en ksh son suficientes y claras, especialmente el libro de O''Reilly. Bash es una misa Lo mantengo como shell de inicio de sesión raíz para Linux solo en casa.

Para uso interactivo, prefiero zsh en Linux / UNIX. Ejecuto scripts en zsh, pero probaré la mayoría de mis scripts, funciones en AIX ksh.


Esta es una batalla entre Unix y Linux. La mayoría de las distribuciones de Linux, si no todas, tienen bash instalado y ksh opcional. La mayoría de los sistemas Unix, como Solaris, AIX y HPUX, tienen ksh como valor predeterminado.

Personalmente siempre uso ksh, me encanta la finalización de vi y prácticamente uso Solaris para todo.


Intento.

Las diversas implementaciones de UNIX y Linux tienen varias implementaciones de ksh de nivel de fuente diferentes, algunas de las cuales son ksh reales, algunas de las cuales son implementaciones de pdksh y algunas de las cuales son simplemente enlaces simbólicos a algún otro shell que tiene una personalidad "ksh". Esto puede llevar a diferencias extrañas en el comportamiento de ejecución.

Al menos con bash, puede estar seguro de que se trata de una base de código única, y lo único que necesita preocuparse es qué versión (normalmente mínima) de bash está instalada. Después de haber hecho muchas secuencias de comandos en casi todos los UNIX modernos (y no tan modernos), la programación para bash es más consistente en mi experiencia.


La diferencia entre Kornshell y Bash es mínima. Hay ciertas ventajas que uno tiene sobre el otro, pero las diferencias son mínimas:

  • BASH es mucho más fácil establecer un indicador que muestra el directorio actual. Hacer lo mismo en Kornshell es hackish.
  • Kornshell tiene matrices asociativas y BASH no. Ahora, la última vez que usé matrices asociativas fue ... Déjame pensar ... Nunca.
  • Kornshell maneja la sintaxis de bucle un poco mejor. Por lo general, puede establecer un valor en un bucle de Kornshell y tenerlo disponible después del bucle.
  • Bash se encarga de obtener los códigos de salida de las tuberías de una manera más limpia.
  • Kornshell tiene el comando de print que es mucho mejor que el comando echo .
  • Bash tiene terminaciones de pestañas. En versiones anteriores
  • Kornshell tiene el comando r history que me permite volver a ejecutar comandos antiguos con rapidez.
  • Kornshell tiene la sintaxis cd old new que reemplaza lo old con lo new en tu directorio y CD por allí. Es conveniente cuando tienes en un directorio llamado /foo/bar/barfoo/one/bar/bar/foo/bar y necesitas cd a /foo/bar/barfoo/two/bar/bar/foo/bar En Kornshell , simplemente puede hacer cd one two y terminar con eso. En BASH, tendrías que cd ../../../../../two/bar/bar/foo/bar .

Soy un viejo chico de Kornshell porque aprendí Unix en la década de 1990, y ese fue el caparazón de elección en aquel entonces. Puedo usar Bash, pero a veces me siento frustrado porque en el hábito uso alguna característica menor que Kornshell tiene que BASH no tiene y no funciona. Entonces, siempre que sea posible, configuro Kornshell como mi predeterminado.

Sin embargo, voy a decirte que aprendas BASH. Bash ahora está implementado en la mayoría de los sistemas Unix, así como en Linux, y simplemente hay más recursos disponibles para aprender BASH y obtener ayuda que Kornshell. Si necesita hacer algo exótico en BASH, puede continuar con , publicar su pregunta y obtendrá una docena de respuestas en pocos minutos, ¡y algunas incluso serán correctas !.

Si tienes una pregunta sobre Kornshell y la publicas en , tendrás que esperar a que pasen viejos personajes de su hacker principal, como cuando me despierto de su siesta antes de obtener una respuesta. Y, olvídate de obtener una respuesta si están sirviendo budín en la casa de ancianos ese día.

BASH es simplemente el caparazón de elección ahora, así que si tienes que aprender algo, también podría ser popular.


Mi respuesta sería ''elegir uno y aprender a usarlo''. Ambos son caparazones decentes; Bash probablemente tenga más campanas y silbatos, pero ambos tienen las características básicas que querrás. Bash es más universal disponible en estos días. Si usas Linux todo el tiempo, simplemente mantente con él.

Si está programando, es una buena práctica tratar de seguir con la ''sh'' simple para la portabilidad, pero luego con bash disponible tan ampliamente en estos días, ese consejo probablemente sea un poco pasado de moda.

Aprenda cómo usar la finalización y su historial de shell; lea la página de manual de vez en cuando y trate de aprender algunas cosas nuevas.


No te olvides de zsh .



Para las secuencias de comandos, siempre uso ksh porque suaviza las gotchas .

Pero creo que bash es más cómodo para el uso interactivo. Para mí, los enlaces clave de emacs y la finalización de pestañas son los principales beneficios. Pero eso es principalmente fuerza de hábito, no es un problema técnico con ksh .


Por un lado, bash tiene tabulación completa. Esto solo es suficiente para hacer que lo prefiera en lugar de ksh.

Z shell tiene una buena combinación de características únicas de ksh con las cosas bonitas que ofrece bash, además de muchas más cosas además de eso.


Soy un veterano korn-shell, así que sé que hablo desde esa perspectiva.

Sin embargo, me siento cómodo con Bourne shell, ksh88 y ksh93, y sé qué características son compatibles en qué.

Para uso interactivo, tome lo que se ajuste a su necesidad. Experimentar. Me gusta poder usar el mismo shell para uso interactivo y para programación.

Pasé de ksh88 en SVR2 a tcsh, a ksh88sun (que agregó un importante soporte de internacionalización) y ksh93. Probé bash, y lo odié porque aplastó mi historia. Luego descubrí shopt -s lithist y todo estaba bien. (La opción lithist garantiza que las líneas nuevas se conservan en su historial de comandos).

Para la programación de shell, recomendaría seriamente ksh93 si desea un lenguaje de programación coherente, una buena conformidad con POSIX y un buen rendimiento, ya que muchos comandos comunes de Unix pueden estar disponibles como funciones integradas.

Si desea portabilidad, use al menos ambos. Y asegúrese de tener un buen conjunto de pruebas.

Hay muchas diferencias sutiles entre las conchas. Considere, por ejemplo, leer desde una tubería:

b=42 && echo one two three four | read a b junk && echo $b

Esto producirá diferentes resultados en diferentes caparazones. El korn-shell ejecuta tuberías desde atrás hacia adelante; el último elemento en la tubería se ejecuta en el proceso actual.

Otro ejemplo que ilustra la consistencia: el comando de echo sí, que quedó obsoleto por la división entre BSD y SYSV Unix, y cada uno introdujo su propia convención para no imprimir nuevas líneas (y otros comportamientos). El resultado de esto aún se puede ver en muchos scripts ''configure''.

Ksh adoptó un enfoque radical al respecto e introdujo el comando de print , que en realidad admite ambos métodos (la opción -n de BSD y el carácter especial final /c de SYSV)

Sin embargo, para la programación de sistemas serios, recomendaría algo más que un shell, como Python, Perl. O dé un paso más allá y use una plataforma como títeres, que le permite ver y corregir el estado de clústeres completos de sistemas, con una buena auditoría.

La programación de Shell es como nadar en aguas inexploradas, o algo peor.

La programación en cualquier idioma requiere familiaridad con su sintaxis, sus interfaces y su comportamiento. La programación de Shell no es diferente.


Bash es el estándar para Linux.
Mi experiencia es que es más fácil encontrar ayuda para bash que para ksh o csh.