Cómo usar sentencias Bash If (con 4 ejemplos)


fatmawati achmad zaenuri/Shutterstock

Use la declaración if de Linux Bash para construir expresiones condicionales con un if then fi estructura. Agregar elif palabras clave para expresiones condicionales adicionales, o la else palabra clave para definir una sección general de código que se ejecuta si no se ejecutó ninguna cláusula condicional anterior.

Todos los scripts Bash no triviales necesitan tomar decisiones. La declaración if de Bash le permite a su script de Linux hacer preguntas y, dependiendo de la respuesta, ejecutar diferentes secciones de código. Así es como funcionan.

¿Qué es la ejecución condicional?

En todos los scripts de Bash, excepto en los más triviales, suele existir la necesidad de que el flujo de ejecución tome un camino diferente a través del script, de acuerdo con el resultado de una decisión. Esto se llama ejecución condicional.

Una forma de decidir qué rama de ejecución tomar es usar un if declaración. Es posible que escuches if declaraciones llamadas if then declaraciones, o if then else declaraciones. Son diferentes nombres para la misma cosa.

El if afirmación dice que si algo es verdad, entonces no este. Pero si el algo es falso, hazlo. eso en cambio. El «algo» puede ser muchas cosas, como el valor de una variable, la presencia de un archivo o si dos cadenas coinciden.

La ejecución condicional es vital para cualquier script significativo. Sin él, está muy limitado en lo que puede hacer con su secuencia de comandos. A menos que pueda tomar decisiones significativas, no podrá tomar problemas del mundo real y producir soluciones viables.

El if es probablemente el medio más utilizado para obtener la ejecución condicional. Aquí se explica cómo usarlo en scripts de Bash.

RELACIONADO: Cómo verificar si existe un archivo en Linux Bash Scripts

Un ejemplo simple de declaración If

Esta es la forma canónica de la más simple. if declaración:

if [ this-condition-is-true ]
then
  execute-these-statements
fi

Si la condición dentro del texto se resuelve como verdadera, las líneas de guión en el then se ejecuta la cláusula. Si está revisando guiones escritos por otros, es posible que vea el if declaración escrita así:

if [ this-condition-is-true ]; then
  execute-these-statements
fi

Algunos puntos a tener en cuenta:

  • El if declaración se concluye escribiendo fi.
  • debe haber un espacio después el primer paréntesis” [ ” and before the second bracket ” ] ” de la prueba condicional.
  • Si vas a poner el then palabra clave en la misma línea que la prueba condicional, asegúrese de usar un punto y coma ” ; ” después de la prueba.

Podemos agregar un opcional else cláusula para ejecutar algún código si la prueba de condición resulta ser falsa. El else cláusula no necesita un then palabra clave.

if [ this-condition-is-true ]
then
  execute-these-statements
else
  execute-these-statements-instead
fi

Este script muestra un ejemplo simple de un if declaración que utiliza un else cláusula. La prueba condicional verifica si la edad del cliente es mayor o igual a 21 años. Si lo es, el cliente puede ingresar al local, y el then se ejecuta la cláusula. Si no tienen la edad suficiente, el else se ejecuta la cláusula y no se les permite entrar.

#!/bin/bash

customer_age=25

if [ $customer_age -ge 21 ]
then
  echo "Come on in."
else
  echo "You can't come in."
fi

Copie el script de arriba en un editor, guárdelo como un archivo llamado «if-age.sh» y use el chmod comando para hacerlo ejecutable. Deberá hacer eso con cada uno de los scripts que discutimos.

chmod +x if-age.sh

Usando chmod para hacer un script ejecutable

Ejecutemos nuestro script.

./if-age.sh

Ejecutar el script if-age.sh con la variable de edad establecida en 25

Ahora editaremos el archivo y usaremos una edad menor a 21.

customer_age=18

Realice ese cambio en su secuencia de comandos y guarde sus cambios. Si lo ejecutamos ahora, la condición devuelve falso y se ejecuta la cláusula else.

./if-age.sh

Ejecutar el script if-age.sh con la variable de edad establecida en 18

La cláusula elif

El elif La cláusula agrega pruebas condicionales adicionales. Puedes tener tantos elif cláusulas como quieras. Se evalúan sucesivamente hasta que se determina que uno de ellos es verdadero. Si ninguno de los elif pruebas condicionales prueban ser verdaderas, la else La cláusula, si está presente, se ejecuta.

Este script solicita un número y luego le dice si es par o impar. El cero es un número par, por lo que no necesitamos probar nada.

Todos los demás números se prueban encontrando el módulo de una división por dos. En nuestro caso, el módulo es la parte fraccionaria del resultado de una división por dos. Si no hay parte fraccionaria, el número es divisible por dos, exactamente. Por lo tanto es un número par.

#!/bin/bash

echo -n "Enter a number: "

read number

if [ $number -eq 0 ]
then
  echo "You entered zero. Zero is an even number."
elif [ $(($number % 2)) -eq 0 ]
then
  echo "You entered $number. It is an even number."
else
  echo "You entered $number. It is an odd number."
fi

Para ejecutar este script, cópielo en un editor y guárdelo como «if-even.sh», luego use chmod para hacerlo ejecutable.

Ejecutemos el script varias veces y verifiquemos su salida.

./if-even.sh

Ejecutando el script if-even.sh con varias entradas

Todo eso está funcionando bien.

Diferentes formas de prueba condicional

los paréntesis” [] que hemos usado para nuestras pruebas condicionales es una forma abreviada de llamar a la test programa. Por eso, todas las comparaciones y pruebas que test los apoyos están disponibles para su if declaración.

Estos son solo algunos de ellos:

  • ! expresión: Verdadero si la expresión es falsa.
  • -n cadena: Verdadero si la longitud de la cadena es mayor que cero.
  • cadena -z: Verdadero si la longitud de la cadena es cero. Es decir, es una cadena vacía.
  • cadena1 = cadena2: Verdadero si string1 es lo mismo que string2.
  • cadena1 != cadena2: Verdadero si cadena1 no es lo mismo que cadena2.
  • entero1 -eq entero2: Verdadero si entero1 es numéricamente igual a entero2
  • entero1 -qt entero2: Verdadero si entero1 es numéricamente mayor que entero2
  • entero1 -lt entero2: Verdadero si entero1 es numéricamente menor que entero2
  • -d directorio: Verdadero si el directorio existe.
  • -e archivo: Verdadero si el archivo existe.
  • -s archivo: Verdadero si el archivo existe con un tamaño mayor que cero.
  • -r archivo: Verdadero si el archivo existe y se establece el permiso de lectura.
  • -w archivo: Verdadero si el archivo existe y se establece el permiso de escritura.
  • -x archivo: Verdadero si el archivo existe y se establece el permiso de ejecución.

En la tabla, «archivo» y «directorio» pueden incluir rutas de directorio, ya sean relativas o absolutas.

El signo igual “=y la prueba de igualdad -eq son no lo mismo. El signo igual realiza una personaje por personaje comparación de texto. La prueba de igualdad realiza una numérico comparación.

Esto lo podemos ver usando el test programa en la línea de comandos.

test "this string" = "this string"
test "this string" = "that string"
test 1 = 001
test 1 -eq 001

En cada caso, utilizamos el echo comando para imprimir el código de retorno del último comando. Cero significa verdadero, uno significa falso.

Usando el programa de prueba en la línea de comando para probar diferentes comparaciones

Usando el signo igual” = ” nos da una respuesta falsa comparando 1 con 001. Eso es correcto, porque son dos cadenas de caracteres diferentes. Numéricamente tienen el mismo valor, uno, por lo que el -eq El operador devuelve una respuesta verdadera.

Si desea utilizar la coincidencia de comodines en su prueba condicional, utilice el corchete doble » [[ ]] ” sintaxis.

#!/bin/bash

if [[ $USER == *ve ]]
then
  echo "Hello $USER"
else
  echo "$USER does not end in 've'"
fi

Este script verifica el nombre de cuenta del usuario actual. Si termina en “ve“, imprime el nombre de usuario. Si no termina en ” ve “, el guión te lo dice, y termina.

./if-wild.sh

Ejecutar el script if-wild.sh que muestra la búsqueda con comodines en la prueba condicional de la instrucción if

RELACIONADO: Pruebas condicionales en Bash: si, entonces, si no, elif

Declaraciones If anidadas

Puedes poner un if declaración dentro de otra if declaración.

Esto es perfectamente aceptable, pero anidar if Las declaraciones hacen que el código sea menos fácil de leer y más difícil de mantener. Si se encuentra anidando más de dos o tres niveles de if declaraciones, probablemente necesite reorganizar la lógica de su script.

Aquí hay un guión que obtiene el día como un número, del uno al siete. Uno es lunes, siete es domingo.

Nos indica el horario de apertura de una tienda. Si es un día laborable o un sábado, informa que la tienda está abierta. Si es domingo, informa que la tienda está cerrada.

Si la tienda está abierta, el anidado if declaración hace una segunda prueba. Si el día es miércoles, nos dice que está abierto solo por la mañana.

#!/bin/bash

# get the day as a number 1..7
day=$(date +"%u")

if [ $day -le 6 ]
then
  ## the shop is open
  if [ $day -eq 3 ]
  then
    # Wednesday is half-day
    echo "On Wednesdays we open in the morning only."
  else
    # regular week days and Saturday
   echo "We're open all day."
  fi
else
  # not open on Sundays
  echo "It's Sunday, we're closed."
fi

Copie este script en un editor, guárdelo como un archivo llamado «if-shop.sh» y hágalo ejecutable usando el chmod dominio.

Ejecutamos el script una vez y luego cambiamos el reloj de la computadora para que fuera miércoles y volvimos a ejecutar el script. Luego cambiamos el día a domingo y lo ejecutamos una vez más.

./if-shop.sh
./if-shop.sh
./if-shop.sh

Ejecutar el script if-shop.sh con el reloj de la computadora configurado en un día de la semana, luego un miércoles, luego un domingo

RELACIONADO: Cómo usar pruebas condicionales de doble corchete en Linux

El caso de si

La ejecución condicional es lo que aporta poder a la programación y los scripts, y los humildes if La declaración bien podría ser la forma más utilizada de cambiar la ruta de ejecución dentro del código. Pero eso no significa que sea siempre la respuesta.

Escribir un buen código significa saber qué opciones tienes y cuáles son las mejores para usar para resolver un requerimiento en particular. El if declaración es genial, pero no dejes que sea la única herramienta en tu bolso. En particular, echa un vistazo a la case declaración que puede ser una solución en algunos escenarios.

RELACIONADO: Cómo usar declaraciones de casos en scripts Bash





Source link-39