Los scripts en bash son una consecución de comandos binarios que son ejecutados  de forma única. Normalmente estos scripts se suelen utilizar para programar tareas que ejecuten diferentes acciones de golpe como por ejemplo copias de seguridad.

El primer paso para empezar con un script es crear el archivo que contendría los comandos que se ejecutarán. Para ello con el comando touch o directamente con el editor gedit

touch ejemplo_inicial.sh

Lo primero que hay que tener en cuenta para poder programar en bash es que todo script debe empezar con la linea:

#!/bin/bash

De esta forma el sistema sabe que tiene que ejecutar las siguientes lineas con el programa bash. Una vez creado habrá que ejecutar los permisos precisos para los usuarios que van a ejecutar el script. Por ejemplo si el root será el encargado de ejecutarlo tendrá que tener unos permisos de rwx para poder ejecutarlo.

Cuando los permisos están bien configurados tan solo hay que llamar el script desde terminal con el nombre y la extensión. En el caso de aceptar parámetros, también se pasarán por terminal, para más adelante que sean llamados dentro del código

Variables

Las variables son datos guardados que pueden ser utilizados en cualquier momento dentro del código. Para poder crear una variable tan solo hay que igualar el nombre al valor asignado a la variable. Cuando esta quiera ser llamada lo único que habrá que hacer es poner el nombre con el símbolo $ delante

#!/bin/bash
VARIABLE="Ejemplo de variable"
echo $VARIABLE

Si se quiere leer una entrada de teclado e igualarla a una variable se utiliza la palabra read

#!/bin/bash
#Otra posibilidad es de forma directa 
# read "Introduce valor para la variable: "VARIABLE
echo "Introduce el valor para la variable"
read VARIABLE
echo "El valor introducido es "$VARIABLE

En el caso de haber pasado parámetros al script dentro de la terminal, se podrán utilizar los siguientes comandos especiales

  • $0 -> Nombre del guión
  • $1….$n -> Variables que almacenan los n argumentos (opciones) proporcionados al comando.
  • $# -> Variable que contiene el total de los argumentos proporcionados.
  • $* -> Conjunto de los argumentos.
  • $? -> Valor de ejecución del comando anterior, si es cero es que el comando anterior se ejecutó sin errores, de lo contrario hubo algún error.
  • $$ -> Identifica el proceso del guión.
  • $! -> Identifica el último proceso arrancado en el trasfondo (background).

De esta forma si se llama el script ./ejemplo_inicial.sh pwd

echo "Introduce el valor para la variable"
read VARIABLE
echo "El valor introducido es" $VARIABLE "y lo pasado por argumentos es" $0

Argumentos especiales y comparadores

Las variables y las salidas de los comandos que se utilizan para ejecutar acciones que pueden depender de las comparaciones entre varias cosas. Por ejemplo si en una variable está guardado un numero y se quiere ejecutar una acción si este es menor de 5 habrá que comprarlo. Para ello se utilizan los compradores o lo argumentos especiales que tiene bash:

  • a: El archivo existe
  • d: El archivo existe y es un directorio
  • c: El archivo existe y es de caracteres
  • r: Tienes permiso de lectura del archivo
  • w: Tienes permiso de escritura en el archivo
  • x: Tienes permiso de ejecución del archivo
  • O: Eres propietario del archivo
  • G: Perteneces al grupo que tiene acceso al archivo
  • n: Variable existe y no es nula
  • Archivo1 nt Archivo2: Archivo1 es mas nuevo que Archivo2
  • Archivo1 -ot Archivo2: Archivo1 es mas viejo que Archivo2
  • >, <, >=, <=, =: Comparadores mayor que, menor que, mayor igual, menor igual e igual. La salida será true si la comparación se cumple, sino será false

Bloques condicionales y bucles

Para poder ejecutar instrucciones que dependen del contenido de una variable o simplemente para ejecutar instrucciones de forma repetitiva se utilizan los bloques de código. Los más utilizados son los siguientes:

If elif else

#!/bin/bash
read -p "Introduce un valor: " VALOR
If [ $VALOR -lt 5 ]; then
echo "El valor es menor que 5"
elif [ $VALOR -gt 5 ]; then
echo “El valor es mayor que 5”
else
echo "El valor es 5"
fi

Case

#!/bin/bash
read -p "Introduce un valor: " VALOR
case $VALOR in
1) "Pulsado el 1";;
2) "Pulsado el 2";;
3) "Pulsado el 3";;
*) "Opción no contemplada"
esac

While

#!/bin/bash
while [ "$VALOR" != 5 ]
do
read -p "Introduce un valor: " VALOR
case $VALOR in
1) "Pulsado el 1";;
2) "Pulsado el 2";;
3) "Pulsado el 3";;
*) "Opción con contemplada"
esac
done

For

#!/bin/bash
#realiza un recorrido en todos los elementos que estén en la ruta
#y obtiene el momento de creación
for VARIABLE in /home/developandsystem/scripts/*
do
stat --printf '%y'
echo 
done
#!/bin/bash
declare -a LISTA={"elemento1" "elemento2" "elemento3"}
for i in ${LISTA[@]}
do
echo "$i"
done