Tabla de Contenidos

Programación Bash

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.

Ejecución de scripts

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).

Buenas prácticas

Algunos consejos a la hora de realizar scripts en Bash, pueden ser:

Códigos de retorno

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.

Ejecución condicional

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 especiales

Variables definidas por el shell Bash:

Comando test

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).

Operaciones aritméticas

Bash ofrece las herramientas necesarias para realizar operaciones aritméticas.

expr

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

let

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

Entrada de datos: read

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

Estructuras de control

Permiten ejecutar comandos en función del resultado de una expresión.
Para este cometido son muy usados los comandos test y let.

if

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

for

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.

while

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