Ejemplo de Bash If-Then-Else

En esta lección, veremos cómo podemos usar declaraciones If-Then-Else en los scripts del entorno Bash que escribimos. Las declaraciones If-Then-Else son una herramienta útil para proporcionar una forma de definir la ruta de acción de un script cuando se cumplen algunas condiciones. Veamos cuál es la sintaxis de las declaraciones If-Then-Else:

if SOME-COMMANDS
then THEN-COMMANDS
else ELSE-COMMANDS
fi

En el comando anterior que se muestra, si se encuentra que SOME-COMMANDS es verdadero o su estado de retorno es 0, se ejecutarán THEN-COMMANDS. Si este no es el caso, se ejecutan ELSE-COMMANDS. En ALGUNOS COMANDOS, generalmente hacemos alguna comparación de cadenas o comparación de valores en forma de números enteros. También podemos hacer muchas operaciones que involucran archivos. Veamos algunos ejemplos de comandos primarios que se utilizan principalmente cuando se trabaja con condiciones basadas en archivos:

Primario Significado
[-a &ltARCHIVO&gt] Devuelve verdadero cuando existe ARCHIVO.
[-b &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y es un archivo especial de bloque.
[-c &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y es un archivo especial de caracteres.
[-d &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y es un directorio.
[-e &ltFILE&gt] Devuelve verdadero cuando existe ARCHIVO.
[-f &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y es un archivo normal.
[-g &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y su bit SGID está establecido.
[-h &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y es un enlace simbólico.
[-k &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y su bit adhesivo está establecido.
[-p &ltFILE&gt] Devuelve verdadero cuando FILE existe y es una tubería con nombre (FIFO).
[-r &ltARCHIVO&gt] Devuelve verdadero cuando el ARCHIVO existe y es legible.
[-s &ltFILE&gt] Devuelve verdadero cuando FILE existe y tiene un tamaño mayor que cero.
[-t &ltFD&gt] Devuelve verdadero cuando el descriptor de archivo FD está abierto y se refiere a una terminal.
[-u &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y su bit SUID (establecer ID de usuario) está establecido.
[-w &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y se puede escribir.
[-x &ltFILE&gt] Devuelve verdadero cuando FILE existe y es ejecutable.
[-O &ltFILE&gt] Devuelve verdadero cuando el ARCHIVO existe y es propiedad del ID de usuario efectivo.
[-G &ltARCHIVO&gt] Devuelve verdadero cuando el ARCHIVO existe y es propiedad del ID de grupo efectivo.
[-L &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y es un enlace simbólico.
[-N &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y se ha modificado desde que se leyó por última vez.
[-S &ltARCHIVO&gt] Devuelve verdadero cuando FILE existe y es un socket.

THEN-COMMANDS y ELSE-COMMANDS pueden ser cualquier operación UNIX válida o cualquier programa ejecutable. Tenga en cuenta que los comandos then y fi están separados por punto y coma, ya que se consideran elementos completamente separados de un script.

Ejemplo simple If-Then-Else

Comencemos nuestra lección con un ejemplo muy simple con declaraciones If-Then-Else.
Aquí hay un programa de muestra:

Si Ejemplo

Aquí está la salida que vemos cuando ejecutamos nuestro script:

$ . ifelse1.sh
Values are same!
$

Usar argumentos de línea de comandos

También podemos usar argumentos de línea de comandos en nuestros scripts y usar el número de argumentos y los valores en sí como una condición en la declaración IF que definimos. Primero definimos un archivo de texto con el siguiente contenido:

My name is LinuxHint. I love servers, especially the Ubuntu ones. They are so
terminalish!

Ahora, podemos escribir un script que encuentre si una palabra aparece en un archivo de texto o no. Definamos el script ahora:

echo “Finding $1 in $2”
grep $1 $2
if [ $? -ne 0 ]
then
  echo “$1 not found in file $2.”
else
  echo “$1 found in file $2.”
fi
echo “Script completed.”

Este guión es muy dinámico. Considera la palabra a buscar y el archivo a buscar desde la propia línea de comandos. Ahora, estamos listos para ejecutar nuestro script:

. ifelse2.sh love hello.txt

Veremos una salida como:

Finding love in hello.txt
love found in file hello.txt.
Script completed.

Comprobando el número de argumentos de la línea de comandos

Dentro de una declaración IF, incluso podemos verificar cuántos argumentos de la línea de comandos se pasaron al comando para que podamos actuar sobre lo mismo:

count=$#
if [ ! $count -gt 1 ]
then
  echo “Not enough arguments”
else
  echo “Good job!”
fi

Ejecutemos este script ahora, veremos el siguiente resultado:

Argumentos de la línea de comandos

Declaraciones If-Then-Elif-Else

También podemos tener múltiples declaraciones IF en el mismo bloque para reducir la ruta de decisión que toma nuestro programa para ejecutar los comandos que definimos. Aquí está la sintaxis para definir múltiples declaraciones IF en nuestros scripts:

if TEST-COMMANDS
then
RESULT-COMMANDS
elif
ANOTHER-COMMANDS
then
ANOTHER-RESULT-COMMANDS
else
ALTERNATE-COMMANDS
fi

Sin embargo, esto parece bastante familiar y fácil de seguir. Definamos un ejemplo sencillo para establecer cómo funciona el árbol:

count=$#
if [ $count -eq 1 ]
then
  echo “Only one argument found.”
elif [ $count -eq 2 ]
then
  echo “Better, two arguments found.”
else
  echo “Good job, many arguments found!”
fi

Esto es lo que obtenemos con este comando:

Ejemplo de If Then Elif Else

Usar declaraciones de casos

Las declaraciones IF-ELSE son útiles cuando tiene una gran lista de opciones sobre las que debe decidir. Pero en caso de que desee realizar una acción solo en unos pocos casos de coincidencia exacta con el resultado, también podemos usar declaraciones CASE en scripts Bash. Su sintaxis se parece a:

case EXPRESSION in CASE1) COMMANDS-TO-EXECUTE
CASE2) COMMANDS-TO-EXECUTE
CASE2) COMMANDS-TO-EXECUTE
) COMMANDS-TO-EXECUTE
*) COMMANDS-TO-EXECUTE
esac

El último caso con * actúa como el caso predeterminado y se ejecutará cuando ninguno de los casos definidos anteriormente coincida.

Construyamos rápidamente un ejemplo simple usando las declaraciones CASE:

case “$1” in
1)
echo “Value is 1.”

2)
echo “Value is 2.”

3)
echo “Value is 3.”

*)
echo “Other value passed.”
esac

Cada instrucción CASE termina con (doble punto y coma). Esto es lo que obtenemos con este comando:

Ejemplo de CASO

Conclusión

En esta lección, analizamos cómo podemos usar las declaraciones IF-ELSE, IF-THEN-ELIF y CASE en los scripts Bash que definimos para tomar acciones específicas sobre la base de valores que existen en nuestros programas o pasados ​​por el usuario usando posicional parámetros.

Leave a Comment

Your email address will not be published. Required fields are marked *

Hazlo Linux