Un programa o script escrito en bash, tiene por convenio extensión .sh y consiste en un archivo de texto en el que se incluyen los comandos que serán ejecutados uno tras otro hasta llegar a término.
Un script puede ejecutarse de varias maneras:
En todos los casos el usuario debe tener permisos de ejecución, y la ruta del archivo con el código debe estar en la variable de entorno $PATH (a no ser que se especifique en la misma línea de comandos).
Algunos consejos a la hora de realizar scripts en Bash, pueden ser:
Cuando un script finaliza sin mayor problema retorna 0. Si se ha producido un error o se ha dado algún tipo de situación especial, retorna un valor comprendido entre 1 y 255.
Para conocer el valor de retorno del último comando ejecutado, podemos leerlo en la variable especial $?. Es recomendable guardar su valor en una variable, si queremos usar este valor después.
Si deseamos que nuestro script retorne un valor diferente de 0 cuando finalice, lo especificamos con el comando exit [valor de retorno].
El comando exit fuerza la finalización del script.
Se puede especificar diferentes comandos en la misma línea separándolos con ;. De esta manera se ejecutarán uno detrás de otro, sin que se tenga en cuenta sus valores de retorno.
Si se separa con &&, el siguiente comando se ejecutará sólo si el anterior ha devuelto 0 (ejecución correcta).
Si dos comandos se separan con ||, el segundo comando se ejecutará sólo si el anterior ha devuelto un valor diferente de 0 (ejecución no correcta).
Para depurar, pueden usarse los comandos true y false: true siempre devuelve 0, y false siempre devuelve 1.
Variables definidas por el shell Bash:
El comando test efectúa una serie de comparaciones entre archivos, cadenas de caracteres, valores aritméticos y entorno del usuario, devolviendo los valores 0, si la comparación es correcta (expresión verdadera) y 1 si no es así. Tiene dos posibles sintaxis: test [expresión] y [ expresión ] (los espacios entre los corchetes son obligatorios).
Bash ofrece las herramientas necesarias para realizar operaciones aritméticas.
El comando expr es un comando externo del bash.
Su sintaxis es expr [expresión].
Algunos de sus operadores llevan \ delante para no confundirlos con caracteres especiales del Bash.
Es necesario insertar un espacio entre elementos para que sean reconocidos correctamente.
| Operadores aritméticos | Nombre | Operadores lógicos | Nombre |
|---|---|---|---|
| + | Suma | \| | OR lógico |
| - | Resta | \& | AND lógico |
| \* | Multiplicación | \< | menor que |
| / | División entera | \⇐ | menor o igual que |
| % | Módulo | \> | mayor que |
| \( … \) | Paréntesis | \>= | mayor o igual que |
| = | igual | ||
| != | desigual |
Comando interno del Bash, por lo que es más eficiente, ya que no tienen que crear un subproceso para ejecutarse.
No es necesario separar los elementos por un espacio, es más fácil trabajar con variables, ya que se pueden definir en una expresión y no es necesario incluir el símbolo $.
Tiene más opreadores que expr, son más comunes y no requieren del símbolo \ delante.
Tiene dos posibles sintaxis: let [expresión] o (([expresión])).
| Operadores aritméticos | Nombre | Operadores lógicos | Nombre | Otros operadores | Nombre |
|---|---|---|---|---|---|
| + | Suma | || | OR lógico | ~ | Negación binaria |
| - | Resta | && | AND lógico | » | Desplazamiento binatio a la derecha |
| * | Multiplicación | ! | Negación lógica | « | Desplazamiento binario a la izquierda |
| / | División entera | < | menor que | & | AND binario |
| % | Módulo | <= | menor o igual que | | | OR binario |
| ** | Potencia | > | mayor | ^ | XOR binario |
| = | Asignación | >= | mayor o igual que | var++, ++var | Incremento |
| == | Igual que | var--, --var | Decremento | ||
| != | Desigual |
El comando read permite introducir datos, de forma que sea posible realizar programas interactivos.
Se pasan a continuación de read las variables a las que se les asignarán los datos (números o cadenas de caracteres).
Si hay más datos que variables, a la última variable asignada se le asigna una cadena con todos los datos restantes.
Si hay menos datos que variables, las variables sin datos se considerarán nulas.
Si se llama read sin argumentos, la entrada pasara completa como cadena a la variable de Bash $REPLY.
Es posible que la entrada se ponga en la misma linea que una frase, con la opción -p, ejemplo:
read -p "¿Edad del capitán?" edad ¿Edad del capitán? 12 echo $edad 12
Permiten ejecutar comandos en función del resultado de una expresión.
Para este cometido son muy usados los comandos test y let.
Ejecuta una serie de comandos si la condición evaluada es verdad.
Sintaxis:
if [condición] then [comandos si la condición es verdadera] else [comandos si la condición es falsa] fi
Ejecuta la misma serie de comandos tantas veces como valores haya en una lista dada.
En cada iteración una variable toma el valor de la lista considerado en esa iteración.
Sintaxis:
for [variable] in [lista de valores] do [Serie de comandos a ejecutar] done
Es muy interesante el uso de caracteres genéricos en el uso de directorios y archivos, a la hora de definir una lista.
Se ejecutarán una serie de comandos mientras la condición sea válida.
Sintaxis:
while [condición] do [Serie de comandos a ejecutar] done