Bash Scripting Condicionales#
Variables especiales (más usadas)#
| Caracter | Definicion |
|---|---|
| $@ | Expande los parametros posicionales, iniciando en uno. Cuando la expansion esta entre comillas cada parametro se expande a una palabra separada. |
| $# | Expande el numero de argumentos recibidos a un numero decimal. |
| $? | Expande el codigo de salida del último comando ejecutado. |
| $$ | Expande el PID(Process ID) de la shell donde se ejecuta el script. |
| $0 | Expande el nombre de la shell o script. |
| $1,$2..$n | Expande a cada argumento recibido iniciando en uno. |
Condicionales#
Test Command#
El comando test se utiliza para evaluar la veracidad de una expresion, recibe una expresion y devuelve 0 de ser verdadero o 1 de ser falso. Para evaluar el codigo de retorno se utiliza echo y la variable especial $?.
Sintaxis#
oExpresiones#
| Expresion | Descripción |
|---|---|
| ( EXPRESION ) | EXPRESION es verdadero. |
| ! EXPRESION | EXPRESION es falso. |
| EXPRESION1 -a EXPRESION2 | Ambas EXPRESION1 y EXPRESION2 son verdaderas. |
| EXPRESION1 -o EXPRESION2 | Cualquiera de las dos expresiones es verdadera. |
| -n CADENA | El tamaño de la cadena es distinta de cero 0. |
| CADENA | equivalente a -n CADENA. |
| -z CADENA | El tamaño de la cadena es de cero 0. |
| CADENA1 = CADENA2 | Las cadenas son iguales. |
| CADENA1 != CADENA2 | Las cadenas no son iguales. |
| ENTERO1 -eq ENTERO2 | ENTERO1 es igual a ENTERO2. |
| ENTERO1 -ge ENTERO2 | ENTERO1 es mayor o igual a ENTERO2. |
| ENTERO1 -gt ENTERO2 | ENTERO1 es mayor a ENTERO2. |
| ENTERO1 -le ENTERO2 | ENTERO1 es menor o igual a ENTERO2. |
| ENTERO1 -lt ENTERO2 | ENTERO1 es menor que ENTERO2. |
| ENTERO1 -ne ENTERO2 | ENTERO1 no es igual a ENTERO2. |
| -d ARCHIVO | ARCHIVO existe y es un directorio. |
| -e ARCHIVO | ARCHIVO existe. |
| -f ARCHIVO | ARCHIVO existe y es un archivo regular. |
| -h ARCHIVO | ARCHIVO existe y es un link simbolico (soft link). |
| -L ARCHIVO | ARCHIVO existe y es un link simbolico (soft link) igual a -h. |
| -s ARCHIVO | ARCHIVO existe y tiene un tamaño mayor a cero 0. |
Ejemplos#
Sentencia IF/ELSE#
La sentencia if en bash nos permite definir distintos comportamientos basados en una condición. Se utiliza la sintaxis del comando test para realizar las validaciones.
Sintaxis#
Ejemplo#
#!/usr/bin/env bash
NUM1=$1
NUM2=$2
echo "Script que compara si 2 números son iguales"
if [ ${NUM1} -eq ${NUM2} ];
then
echo "Los numeros ${NUM1} y ${NUM2} son iguales"
else
echo "Los numeros ${NUM1} y ${NUM2} NO son iguales"
fi
Sentencia CASE#
La sentencia case es una forma simple evaluar patrones y definir distintos comportamientos sin necesidad de utilizar multiples sentencias if.
La sentencia case realiza una evaluación de un valor de entrada, hasta encontrar un patrón que coincida y ejecuta las intrucciones relacionadas a ese patrón.
Sintaxis#
case $variable in
patron-1)
comandos;;
patron-2)
comandos;;
patron-3)
comandos;;
patron-N)
comandos;;
*)
comandos;;
esac
Ejemplo#
#!/usr/bin/env bash
# Variables de colores
rojo='\e[0;31m'
verde='\e[0;32m'
amarillo='\e[0;33m'
azul='\e[0;34m'
limpiar='\e[0m'
echo "Elige un color?"
echo "1 - Azul"
echo "2 - Rojo"
echo "3 - Amarillo"
echo "4 - Verde"
read -r color;
case $color in
1) echo -e "${azul}Azul${limpiar} es un color primario.";;
2) echo -e "${rojo}Rojo${limpiar} es un color primario.";;
3) echo -e "${amarillo}Amarillo${limpiar} es un color primario.";;
4) echo -e "${verde}Verde${limpiar} es un color secundario.";;
*) echo "El color elegido no esta disponible. Por favor elige un color diferente.";;
esac
Ejercicios#
- Escribe un script que reciba 2 enteros como argumentos y los asigne a 2 variables, el script debe calcular la superficie de un rectangulo con los 2 enteros antes recibidos.
- Escribe un script que genere un backup de el home directory del usuario actual, lo comprima y agregue la fecha actual en el nombre.
- Escribe un script que verifique si el paquetes httpd se encuentra instalado, si lo esta que se asegure de estar iniciado, si no esta instalado que lo instale y lo inicie.
Todos los scripts deben mostrar mensajes en pantalla sobre el progreso para dar información al usuario que lo utiliza.