sintaxis scripts script programacion mundo manejo hola curso comentarios cadenas aprender perl bash scripting

scripts - ¿Vale la pena aprender a BASH cuando conozco a Perl?



scripts bash (23)

Aprende bash. Un buen programador tiene varias secuencias para su proa y el guión de shell es fundamental para cualquier buen desarrollador de UNIX.

Claro que puedes hacer muchas cosas en Perl, lo cual me encanta, pero la mitad de las veces los comandos de UNIX ya han hecho el trabajo por ti. La combinación de comandos de UNIX en una canalización es el verdadero secreto del pirateo de shell. Tienes que hacer una gran cantidad de código para igualar algo así como:

find | grep -l | xargs perl -e "xxx"

Por lo menos, aprenda a usar test comandos while , case y test , junto con los operadores variables en las construcciones $ {var: xxx}.

Todas mis secuencias de comandos están hechas en Perl, puedo ejecutar líneas en la línea de comandos y Perl Regex parece mucho más fácil. ¿Hay algo que pueda hacer en BASH que no pueda hacer en Perl?

Simplemente no me siento como un verdadero hacker a menos que pase el tiempo para profundizar en BASH y empiece a usar Sed y Awk también.

¿Vale la pena, o solo estoy pidiendo dolor y frustración?


Bash personifica el espíritu de UNIX, combinando múltiples herramientas simples para resolver un problema más complejo, usualmente usando pipes para dirigir la salida de un comando a la entrada del siguiente. Este es un estilo de programación que creo que vale la pena conocer; demasiadas personas escriben un programa completo para lograr algo que se puede hacer combinando algunas herramientas existentes en la línea de comando.

Entonces sí, aprende bash. Incluso si no termina usándolo mucho, también podrá leer los muchos scripts bash que son partes clave de la mayoría de los sistemas UNIX / Linux.


Bash y Perl hacen el mismo trabajo de maneras ligeramente diferentes. Perl es un poco más general y poderoso. Si te sientes cómodo usando Perl, seguro, adelante y úsala.

Mi única advertencia es: piensa en el tipo que tendrá que mantener tu código. ¿Él será tan fluido en Perl como tú?

Personalmente, los odio a los dos. ;-PAG


Como mucha gente dice antes, no es necesario que aprendas Bash pero a ti te gustaría saber lo básico. Pero lo básico del shell (sh principalmente porque está en todos los sistemas y es muy mínimo). Entonces aprenderé a hacer un ciclo, qué $ () está en bash y su nueva magia, cómo capturar los argumentos de la línea de comando ($ 0, $ 1, etc.), cómo funciona la cita en Bash (y en el resto de las conchas http://www.grymoire.com/Unix/Quote.html ). Pero al menos mi consejo es que si no lo necesita, no pase mucho tiempo aprendiendo Bash, pero lea sobre ello para saber dónde están las respuestas cuando lo necesite. Y no solo Bash sino también Cshell o similar, para al menos saber cómo establecer variables, sentencias condicionales, alias y bucles para sus archivos de configuración. Cualquier cosa más compleja, puedes hacerlo con Perl pero no porque sea mejor (o no) sino porque ya lo sabes y por lo general no notarías la diferencia (a menos que tu perl-lib sea realmente enorme y llames a tu oneliner tropecientos de veces).

También como programador de Perl, he invertido algo de tiempo aprendiendo a hacer líneas de Perl de manera eficiente, para canalizarlas en el caparazón, y cómo sustituyen los comandos de Unix por ellas. Recomendaré el libro: http://minimalperl.com/


Conozco tanto a Perl como a Bash. Los uso tanto en el trabajo como en casa.

Sí, definitivamente deberías aprender Bash. Entonces podrá usar la mejor herramienta para el trabajo. Sí, todo lo que puedes hacer con Bash se puede hacer con Perl, pero eso no significa que debas hacerlo.


Cosas como bash y awk aún representan el espíritu Unix de los pequeños lenguajes :

  • bash es un lenguaje solo para ejecutar y conectar programas y es extremadamente adecuado para eso
  • awk es un lenguaje solo para procesar registros de datos y es extremadamente adecuado para eso

Mientras perl toma mucho de estos dos, está diseñado como un lenguaje de propósito general . Claro, puede hacer estas tareas en perl , y puede preferir eso porque está familiarizado con su sintaxis.

Pero una vez que te familiarices con bash , que no es tan difícil, el lenguaje es mucho más pequeño que el perl , será más fácil y ciertamente más económico usar la herramienta más específica.

Aprendí perl para desarrollo web y solía usarlo para casi todo. Ahora, me parece que la mayoría de los trabajos son lo suficientemente simples para bash y awk , o lo suficientemente difíciles como para justificar un lenguaje compilado.


De hecho, hay muchos "sí" y "no".

Diría que esto se debe a que es útil aprender bash / zsh / tcsh / lo básico (pipes, loops, redirection de streams, ...).

Pero solo aprendería los detalles de cualquier lenguaje de shell en caso de que sea necesario hacerlo (lo que debería ser muy raro). Los lenguajes de shell son notoriamente dolorosos de usar en muchas situaciones que podrían abordarse fácilmente con Perl o Python, que son posiblemente más potentes (menos líneas y código más simple para el mismo resultado).


Diría una mirada sobre "bash -c help". Si trabajas en * nix world, definitivamente es útil leer las cosas y ocasionalmente escribir algunas cosas rápidas. Podría ser más rápido que escribir en Perl y más inteligente desde la perspectiva de * nix.


Este post hace un poco de presión a favor de Perl: http://lindesk.com/2008/05/shell-script-language-use-perl-not-bash/

Para las personas que están acostumbradas a los idiomas decentes, estos lenguajes de capa sonarán torpes, o incluso malvados. Pero como la mayoría de los guiones de shell son pequeños, a la mayoría de las personas no les importa la tortura. En bash, los comandos de flujo de control parecen arrojarse como un pensamiento posterior en lugar de algo que está incorporado en el lenguaje. Si no me crees, compara el ciclo ''if'' de bash y Perl.

[...]

La solución es simple: no use un lenguaje de shell para escribir sus scripts de shell; utilice un lenguaje de scripting de alto nivel como Perl. O Python, Ruby, PHP, Tcl o incluso JavaScript. Todavía uso bash para escribir scripts de shell, pero si el script de shell tiene una condición if (que no sea una simple comprobación de argumento), uso un lenguaje más alto, generalmente Perl.


Estoy bastante familiarizado con la línea de comandos de Unix y con todas las utilidades (sed, awk, grep, find ...) disponibles. Mi regla general es que si se trata de un bucle de una línea, o de un bucle, para capturar un grupo de archivos y hacer solo unas pocas operaciones, yo uso bash / tcsh / zsh, de lo contrario utilizo Python. Encontré un poco difícil de usar, y cada vez que las cosas necesitaban más que el uso de awk más básico, o algo parecido a un script, es simplemente más simple usar un lenguaje real.

Utilicé Perl durante mucho tiempo, y cambié de forma muy exclusiva a Python. Si conoce Perl, úselo. Este es el tipo de cosa para la que fue hecho.


Hay un libro muy bonito llamado "Minimal Perl" que tiene muchos trucos para abandonar bash. Realmente me gusta usar ambos ya que no puedo manejar sed y awk. Entonces, si alguno de mis scripts se vuelve complicado, sé que tengo que usar Perl o Python. Además, considero que Perl es mucho más rápido cuando se trabaja con archivos. Pero usar Perl para enviar algunos archivos a través de SSH o hacer algunos ifs y fors, es una exageración.

OTOH, Bash (o cualquier otro Shell de Unix para el caso) apestan haciendo matemáticas simples / complejas y son realmente difíciles de depurar. bash -s foo.sh no es suficiente!


Necesitas aprender a leerlo.

No tienes que aprender a escribirlo.

Pero tus amigos de administrador de sistemas te verán raro cuando escribas wrappers perl para trabajos cron.

La cosa con la que me encuentro utilizando bash con más frecuencia es algo como esto:

for serv in `cat server_names.txt`; do ssh $serv ''some command''; done;

Claro, podría hacerlo en Perl ... pero eso parece un poco exagerado.


No ... si sabes cómo codificar en Perl / Python / Ruby no te molestes en aprender bash.

NO obstante, aprenda a usar la línea de comandos de UNIX, es decir, tuberías, redirecciones y comandos útiles.


No debe sentir que tiene que aprender algo simplemente porque otras personas lo usan. He estado usando Unix desde 1988 y probablemente he escrito menos de 1000 líneas de script de shell.

Todo lo que uso bash (ksh) es como un caparazón - el lado del scripting no es útil - las cosas simples se hacen con awk y pipes, y las cosas complejas requieren C. En su mayoría awk embargo.

No puedo pensar en una razón convincente para aprender a escribir scripts bash, más allá de lo básico.

La belleza y el poder de Unix es que podemos usar cualquier cosa con la que nos sintamos cómodos y lograr casi los mismos resultados.


No hay una respuesta correcta y definitiva a su pregunta. Depende de lo que vas a hacer. Si se trata de mantener algún tipo de código, aprender bash, awk y sed tiene sentido. Si es solo por placer personal, también es aceptable.

Sin embargo, si se trata de mantener un script que nadie puede mantener, porque nadie sabe bash, awk y sed, entonces no tiene sentido aprender los idiomas y si puede reescribir el script con las pruebas adecuadas y reproducirlo sin errores, entonces aprender un el nuevo idioma no tiene sentido con respecto a las escalas de tiempo.

Saber más que en el lenguaje de scripting funciona bien, ya que en la mayoría de los casos las personas no están demasiado familiarizadas con perl, en cuyo caso lo más probable es que conozcan al menos bash. Además, si estás en un equipo donde la mayoría de la gente sabe bash, awk, sed, entonces tendría sentido aprender esos idiomas.

Creo que aprender algo nuevo que puedas utilizar en tu vida diaria como desarrollador no solo agrega valor a tu conjunto de habilidades, sino que también ayuda a mantener la mente en forma


No te preocupes por bash, pero sí preocúpate por saber y saber las diferencias entre ellos. (por ejemplo, comprender lo que en un script bash no es válido sh, es decir, "bashisms")

Considera lo siguiente:

test x"$SHELL" = x/bin/perl && RESULT=no; echo "${RESULT-yes}"

Si entiendes lo anterior por completo, entonces probablemente ya conozcas lo suficiente para salir adelante. Si no comprende lo anterior, ejecute el comando; si imprime ''sí'', entonces necesita aprender más sh. (Interpretación en inglés: si usas Perl como tu shell de inicio de sesión, entonces podrías arreglártelas sin aprender sh. De lo contrario, lo haces).

Para responder a tu pregunta concretamente; no, probablemente no hay nada que puedas hacer en bash que no puedas hacer en perl, pero si estás usando bash para tu caparazón, es tonto caer para perler todo el tiempo. Si bash es tu caparazón, entonces es una herramienta que estás usando mucho. Por lo tanto, debes saber cómo usarlo bien.


Por supuesto, ya que es el shell predeterminado en la mayoría de las distribuciones de Linux.

Pero una razón más: ¿y si Perl no está disponible? No hace mucho tiempo había cambiado a un nuevo trabajo, y aunque sé un poco de Python y Ruby y algunos Perl, pero no estaban disponibles en el sistema en vivo, donde tuve que analizar los archivos de registro, crear copias de seguridad y datos raspados . Tuve que aprender Bash (y awk), y lo valen.


Si estás tan cómodo en Perl, entonces sigue usando Perl.

Bash es útil para saber si va a editar scripts existentes (por ejemplo, cosas en /etc/init.d), y probablemente encontrará que puede leerlo con suficiente facilidad si conoce Perl.

Si usted es el tipo de persona que le gusta aprender nuevos idiomas, quédese atrapado en bash, awk, sed, etc. Si le preocupa el dolor y la frustración, quédese con lo que sabe.

Si quieres sentirte como un hacker, aprende Lisp.


Si te sientes cómodo al utilizar Perl para cualquier script simple que necesites, simplemente debes quedarte con Perl. De ese modo, se guarda la memoria de su cerebro a partir de una fragmentación severa con información redundante.

Para ponerlo en claro: Usar sed, awk y amigos está bien, pero verás que puedes hacer el mismo trabajo en Perl, de una manera más limpia, que es más consistente con lo que ya sabes. BASH y la cadena de herramientas de Unix a veces son más amigables con el desarrollo rápido que Perl, pero por otro lado, están llenos de originalidades extrañas o al menos poco comunes. Aprender y mantener es bastante lento y en mi humilde opinión no vale la pena si ya tienes una herramienta similar potente como Perl, que incluso podría verse como un sucesor.


Un par de puntos:

  • Saber bash te ayuda a aprender realmente las grietas del conjunto de herramientas de comandos de Unix / Linux, por lo que puede ser muy valioso para un administrador de sistemas.
  • Bash está en todas partes y se usa en casi todo, desde guiones de inicio hasta pegamento de aplicaciones empresariales (mira alguna vez la herramienta de netbackup).
  • Si necesita solucionar problemas de script de bash de otro (o de otro producto), se alegrará de que sepa bash.
  • Si Perl no está disponible, te alegrará saber que bash.
  • Y, por último, a veces bash es más rápido para esos trabajos rápidos y sucios del que necesito esto en 5 minutos de variedad. Puede eliminar una tubería de comandos y un bucle simple en poco tiempo.

Eso no quiere decir que tampoco debas aprender perl, ruby ​​y python. Bash es definitivamente una habilidad "y". Deberías aprender bash y algo más (o varias cosas más).


Una manera quizás tonta de responder es que en realidad hay conchas Perl. He escrito un parche para Zoidberg (un intérprete de comandos de Perl) y espero que ese proyecto vuelva a ser viable pronto (he estado en contacto con el autor original).

La idea general es que si zoid reconoce el comando como Perl lo interpreta, no lo trata como un comando. El poder está en envolver a los dos juntos para un poderoso uso de la carcasa.


Utilicé Perl como mi lenguaje principal de scripting durante varios años y, finalmente, comencé a recoger bits de bash, sed y awk y creo que vale la pena conocerlos. Esencialmente cualquier cosa que puedas hacer en Perl, probablemente puedas hacerlo en sed, awk o bash, y con suficiente código de fantasía, lo inverso probablemente también sea cierto. Dicho esto, hay muchas ocasiones en que sed, awk o bash proporcionan una solución más elegante a un problema. Evidentemente, Perl ha prestado mucho de esos idiomas y es increíblemente versátil, pero esas herramientas persisten porque son simples y útiles en muchos casos.


no aprendas ''bash'', aprende sh / ksh / pdksh, es la base de bash y conoce los conceptos básicos de él en lugar de todas las malas prácticas (bashisms) que aprenderá bash te enseñaría, te dejaría usar cualquier sistema unix / posix con ksh o sh (o bash). Incluso los servicios para Unix de Microsoft vienen con un shell korn.