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