Bash para principiantes
Bash es el interprete de comandos por excelencia en Unix, y por lo tanto lo es también de OSX.
Aunque hay otros intérpretes de comandos, o shells muy interesantes como csh o ksh, el éxito de bash es debido a la versatilidad en línea de comandos y a su potencia componiendo scripts.
Un script en bash, se compone de:
Una cabecera que le dirá al sistema que este script lo interpretará bash.
#!/bin/bash
Debería incluir una pequeña descripción de su finalidad.
#Comentarios
Variables de entorno para la ejecución del script
VARIABLE1=VALOR1
Una lista de comandos ejecutados recursivamente.
#!/bin/bash echo “Este script muestra la ejecución de varios comandos” ls date echo “ya se ha acabado”
Como es obvio, un script de bash no solo sirve para hacer un listado de un directorio y enseñar la hora.
Como todo lenguaje de programación, bash tiene sus propias funciones y como toda shell, también tiene sus propios comandos ‘embebidos’.
La forma de ejecución de varios comandos es con la ayuda de operadores de lista:
comando1 ; comando2 && comando3
En este ejemplo, se ejecuta el comando1 y después se ejecuta el comando2. Si el comando2 no produce ‘0’ , se ejecutará el comando3.
Por ejemplo, si ejecutásemos:
comando1 ; comando2 || comando3
comando3 se ejecutaría en caso de que comando2 diera otra salida distinta a error.
Si queremos ejecutar varios comandos a la vez, en diferentes planos, deberemos poner:
comando1 & comando2 & comando3
Para acceder a cualquiera de estos comandos, se utiliza el comando
fg numero_de_trabajo
Si queremos unir la salida de varios programas, podemos utilizar las tuberías o ‘pipes’ (este caracter se consigue con alt+1)
cat lista_de_nombres | sort
Con lo cual veríamos en pantalla la lista de los nombres contenida en el fichero, ordenada alfabéticamente.
El numero de pipes puede ser infinito:
cat lista_de_nombres | sort | grep Pepe | more
Con este comando veríamos la lista de lista de antes, ordenada, excluyendo a los que no se llamen «Pepe» y paginada con el comando more.
Para series de comandos más largos, necesitaremos el lenguaje de script de bash.
Bash tiene saltos condicionales, incondicionales, bucles, asignación de variables, variables de entorno y funciones, como cualquier lenguaje de programación.
Vamos a ver un ejemplo de script en bash:
#!/bin/bash # Ejecutaremos el script y según lo que introduzcamos como parámetro, # nos dará una respuesta distinta. echo “ Cuantos meses llevas con tu Mac?” case “$1” in 0-1) echo “El inicio es lo mas divertido” ;; 2-3) echo “ Ya sabes donde esta el ls y el rm, jeje” ;; 4-6) echo “Comienzas a dominar el sistema” ;; 7-12) echo “Todavia falta” ;; 13-24) echo “Llevas bastante tiempo” ;; *) echo “ Respuesta no valida o llevas mas de 24 meses” exit 0 ;; esac exit 0
Bien, ya hemos comprendido el uso de la pareja case-esac, muy utilizado en los scripts de inicio y en todos aquellos que no que ramos abusar de los saltos condicionales if.
Los saltos condicionales if se pueden utilizar para asegurarnos durante el lanzamiento de un script, que existe un fichero o no:
COMANDO=$1 if [ -x $1 ] ; then echo –n “Se puede ejecutar” else echo .n “no se puede ejecutar” fi
if, aparte de –x tiene una nutrida lista de descriptores de fichero. Para más información de esta lista, se puede recurrir al manual de bash (escribe «man bash» en el terminal).
Las variables de entorno del propio bash, se fijan en ~/.bash_profile, ~/.bashrc y en /etc/profile.d
siendo lo mas recomendado minimizar el uso de variables generales en el sistema.
El uso de sed, cut, y otras pequeñas utilidades, pueden ahorrarnos muchas horas de edición si tenemos que hacer substituciones de texto, ordenar, etc.
Las posibilidades de bash, necesitan de la creación de una necesidad especifica, que siempre podremos suplirla con la ayuda de su extenso manual.
Saludos,