Tutoriales

Declaraciones de Bash condicionales – OSTechNix

En esta guía, usaremos ejemplos para aprender a usar declaraciones condicionales en scripts bash. La toma de decisiones es un paso importante en la programación. Puede haber una situación en la que se deban cumplir ciertas condiciones y la lógica debe escribirse en base a ellas. Esto es lo que hace una declaración condicional. Puede usar las declaraciones condicionales para escribir lógica y tomar decisiones. El concepto que lee aquí es el mismo para todos los lenguajes de programación, pero con diferencias en la sintaxis y la implementación.

Sintaxis de declaración condicional

El bloque de construcción de la declaración condicional en bash es el siguiente.

if [[ conditions ]]
then
   code
elif [[ conditions ]]
then
   code
else
   code
fi

Explicación del código:

  1. Las palabras clave "if" y "fi" marque el principio y el final de la declaración condicional. Esto debería seguir a cada declaración if "then" Palabra clave.
  2. Cualquiera [[ ]] o [ ] debe usarse para evaluar la condición. Cuando la condición también se evalúa «Cierto», luego se ejecuta un bloque de código.
  3. Una declaración condicional puede tener una condición if y una elif Condiciones. Si una condición se evalúa como verdadera, se omiten todas las declaraciones condicionales posteriores.
  4. Me caigo if o elif El bloque se evalúa como incorrecto luego el bloque de código del "else" La cláusula se está ejecutando.
  5. Aunque no existen reglas estrictas de sangría, deje 2 espacios para que el bloque de código sea más fácil de leer.

Para evaluar las condiciones, bash tiene un comando incorporado llamado "test". Los corchetes corresponden al comando de prueba, por lo que puede usar el comando de prueba o los corchetes.

$ type -a test
test is a shell builtin
test is /usr/bin/test
test is /bin/test

Hay una serie de operadores que son compatibles con el test Comando para evaluar las condiciones, y veremos cómo usar estos operadores en la siguiente sección. Para obtener la lista de operadores, puede ejecutar uno de los siguientes comandos.

$ man test
$ help test

Operadores de prueba de archivos

Los operadores de prueba de archivos se pueden utilizar para trabajar con objetos de archivos o directorios. Los operadores de prueba de archivos se pueden usar para verificar si existe o no un archivo o directorio específico, un objeto específico es un archivo o directorio, qué tipo de archivo está tratando, tamaño del archivo, etc. Ejecute el siguiente comando y observe para la sección Operador de archivos.

$ man test
Operador de prueba de archivo

No todos los operadores se utilizan con frecuencia, pero le explicaré los más importantes.

Para comprobar si un archivo específico existe o no, utilice el -e Bandera. Aquí compruebo si el .bashrc El archivo existe o no en mi directorio personal.

if [[ -e /home/$USER/.bashrc ]]
then
  echo "File is present"
else
  echo "File is not present"
fi
Compruebe si el archivo existe o no
Compruebe si el archivo existe o no

Para verificar si un directorio específico existe o no, use el -d Bandera. Aquí los miro Escritorio Directorio en mi carpeta de inicio.

if [[ -d ~/Desktop/ ]]
then
  echo "Directory is present"
else
  echo "Directory is not present"
fi
Compruebe si el directorio existe o no
Compruebe si el directorio existe o no

Cómo verificar que el Tamaño distinto de cero Archivo, use el -s Bandera. Aquí tengo un archivo llamado. creado "zero_byte.txt" y agregó algo de texto.

$ touch ~/Desktop/zero_byte.txt
$ echo "Writing something" >> ~/Desktop/zero_byte.txt
$ if [[ -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi
Compruebe si el archivo tiene cero bytes o no
Compruebe si el archivo tiene cero bytes o no

Puedes usar ! Símbolo con banderas que invierten el resultado. Estoy usando el mismo ejemplo que el anterior, pero con "!" Símbolo. Invertirá el archivo y lo imprimirá como un archivo de cero bytes cuando no lo haga.

$ if [[ ! -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi
Operaciones inversas
Operaciones inversas

Operadores de comparación de enteros

A continuación se muestran los operadores de comparación de enteros que se evalúan frente a dos enteros dados.

-eq => Integer X is equal to Integer Y
-ne => Integer X is not equal to Integer Y
-gt => Integer X is greater than Integer Y
-ge => Integer X is greater than or equal to Integer Y
-lt => Integer X is lesser than Integer Y
-le => Integer X is lesser than or equal to Integer Y

Cada comando de bash pasa un código de salida entre 0-255 y usamos los operadores de comparación de enteros para evaluar los códigos de salida. En el siguiente ejemplo asigno el código de salida del nvim Comando a una variable llamada EXCODE y realizar la comparación de enteros. Dado que neovim no está disponible, arroja el Código de salida 127 (Error de comando no encontrado).

$ EXCODE=$(nvim;echo $?)
$ if [[ $EXCODE -eq 0 ]]
then      
  echo "nvim is available to use"
elif [[ $EXCODE -eq 127 ]]
then
  echo "Command not found, check if nvim is installed or not"
else     
   echo "Return code is other than 0 & 127. Check and fix the error"
fi
Ejemplo comparativo de enteros
Ejemplo comparativo de enteros

En el ejemplo anterior, tengo el elif Declaración de la primera declaración de este artículo. Primero el "if" La condición se evalúa para ver si el código de retorno es nulo, que devuelve falso, luego se pasa el control. a entregar elif La declaración y la condición se evalúan como verdaderas y ejecutan el bloque de código. Puedes agregar mucho elif Instrucción para evaluar diversas condiciones.

También puede evaluar varias condiciones en una sola if o elif Declaración con operadores lógicos AND, OR.

LOGICAL AND ⇒ && symbol => All the conditions should be evaluated to be true.
LOGICAL OR ⇒ || symbol => Anyone condition should be evaluated to be true.

A continuación se muestra un ejemplo de uno lógico Y Operador donde el número entero se almacena en variables X y Y están clasificados como cierto.

$ X=10
$ Y=15
$ if [[ $X -eq 10 && $Y -eq 15 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi
Uso del operador lógico AND
Uso del operador lógico AND

A continuación se muestra el ejemplo de uno lógico O Operador donde variable X está clasificado como cierto y variable Y está clasificado como incorrecto.

$ X=10
$ Y=15
$ if [[ $X -eq 10 || $Y -eq 10 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi
Uso del operador lógico OR
Uso del operador lógico OR

Declaraciones condicionales compactas

Cuando solo tienes que escribir uno if y else Declaración, entonces puede utilizar la abreviatura. En resumen, no hay necesidad de usarlo. if..then..else..fi Palabras clave. Puede usar AND lógico (&&) y OR lógico (||) Operador.

[[ condition ]] && << run if condition is evaluated to true >> || << run if condition is evaluated to false >>

Eche un vistazo al siguiente ejemplo. Estoy intentando comprobar si el paquete neofetch está disponible y, si no lo está, intente instalarlo.

$ which neofetch && echo "Neofetch already installed" || sudo apt install neofetch -y
Ejemplo de una expresión lógica compacta
Ejemplo de una expresión lógica compacta

Explicación del código:

  • Funcionará "which neofetch" Comando y si el código de retorno es cero, lo que venga después && El operador se ejecutará.
  • Si el código de retorno es mayor que cero (se evalúa como falso), lo que venga después || El operador se ejecutará.
  • Esto es similar a eso if y else Opinión. los "If" La declaración solo se ejecuta si la condición se evalúa como verdadera. En este caso lo es Y Operador. Asimismo, la cláusula else solo se ejecuta si "if" La condición se evalúa como falsa. En este caso lo es O Operador.
  • Neofetch ya está instalado en mi computadora, por lo que el código de salida es cero. Funcionará echo Mando. Si neofetch no está instalado, se ejecutará apt install Mando.

A continuación se muestra otro ejemplo en el que estoy usando el operador de prueba de archivo para verificar si un archivo tiene cero bytes o no.

$ [[ -s ~/.bashrc ]] && echo "Not a empty file" || echo "Empty file"
Operador de prueba compacto para expresiones lógicas
Operador de prueba compacto para expresiones lógicas

Operadores de comparación de cadenas

Gustar Entero y expediente Operadores de prueba Tenemos una serie de operadores para trabajar con cadenas. Los operadores de cadena importantes se enumeran a continuación.

-z => Check if string is NULL.
-n => Check if string is not NULL.
== => Check for string equality.
!= => Check for string inequality.

Para comprobar si la cadena es NULL o no, utilice el -z y -n Bandera. Estoy usando la sintaxis de declaración condicional compacta para evaluar la condición.

$ [[ -z "Howdy" ]] && echo "String is NULL" || echo "String is not NULL"
$ [[ -n "Howdy" ]] && echo "String is not NULL" || echo "String is NULL"
Cadena nula o no
Cadena nula o no

Para comprobar si dos cadenas son iguales, utilice == Operador. Las cadenas distinguen entre mayúsculas y minúsculas, por lo que debe realizar la comparación teniendo en cuenta este punto.

$ X="Linux"
$ Y="Linux"
$ [[ $X == $Y ]] && echo "Equal" || echo "Not equal"
Igualdad de cadenas
Igualdad de cadenas

Para comprobar si dos cadenas no son iguales, utilice != Operador.

$ [[ $X != $Y ]] && echo "Not Equal" || echo "Equal"
No igual al operador

diploma

En este artículo vimos cómo trabajar con declaraciones condicionales en bash. También vimos cómo usar operadores de cadena, enteros y prueba de archivos. Finalmente, usamos ejemplos para discutir cómo escribir declaraciones condicionales compactas usando operadores lógicos AND y lógicos OR.

Para comentarios o sugerencias, utilice la sección de comentarios y estaremos encantados de responderle.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba