Saltar a contenido

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#

test EXPRESION
o

[[ EXPRESION ]]

Expresiones#

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#

test 100 -gt 99 && echo "Verdadero." || echo "Falso."
test 100 -lt 99 && echo "Yes." || echo "No."
[ "edutek" = "edutek" ]; echo $?
[ 5 -eq 6 ]; echo $?

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#

if [ expresion ];
then
    ACCION
fi

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#

  1. 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.
  2. Escribe un script que genere un backup de el home directory del usuario actual, lo comprima y agregue la fecha actual en el nombre.
  3. 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.