La expresión bash es la combinación de operadores, características o valores utilizados para formar una declaración condicional bash. La expresión condicional podría ser una expresión binaria o unaria que involucre comandos numéricos, de cadena o cualquier comando cuyo estado de retorno sea cero cuando tenga éxito.
Hay varias expresiones condicionales que podrían usarse para probar con los archivos. Las siguientes son algunas expresiones condicionales que son útiles.
- [ -e ruta del archivo ] Devuelve verdadero si el archivo existe.
- [ -x ruta del archivo ] Devuelve verdadero si el archivo existe y es ejecutable.
- [ -S ruta del archivo ] Devuelve verdadero si el archivo existe y es un archivo de socket.
- [ expr1 -a expr2 ] Devuelve verdadero si ambas expresiones son verdaderas.
- [ expr1 -o expr2 ] Devuelve verdadero si cualquiera de las expresiones 1 o 2 es verdadera.
Para obtener más expresiones condicionales para verificar los archivos, las cadenas y los valores numéricos, consulte la página de manual de bash.
Ejemplo 1 de Bash. Comprobar la existencia del archivo
El siguiente fragmento de código del script de shell Bash obtiene el nombre del archivo con su ruta absoluta, verifica si el archivo existe o no y arroja la información adecuada.
$ cat exist.sh #! /bin/bash file=$1 if [ -e $file ] then echo -e "File $file exists" else echo -e "File $file doesnt exists" fi $ ./exist.sh /usr/bin/boot.ini File /usr/bin/boot.ini exists
Consulte nuestro artículo anterior para comprender los diversos tipos de declaraciones bash if.
Ejemplo 2 de Bash. Compara números
El siguiente script lee dos números enteros del usuario y verifica si ambos números son iguales, mayores o menores que el otro.
$ cat numbers.sh #!/bin/bash echo "Please enter first number" read first echo "Please enter second number" read second if [ $first -eq 0 ] && [ $second -eq 0 ] then echo "Num1 and Num2 are zero" elif [ $first -eq $second ] then echo "Both Values are equal" elif [ $first -gt $second ] then echo "$first is greater than $second" else echo "$first is lesser than $second" fi $ ./numbers.sh Please enter first number 1 Please enter second number 1 Both Values are equal $ ./numbers.sh Please enter first number 3 Please enter second number 12 3 is lesser than 12
Si es nuevo en bash scripting, consulte nuestro tutorial de introducción a Bash.
Ejemplo 3 de Bash. Calculadora aritmética básica
Este ejemplo lee entrada, que es un tipo de operación aritmética que se quiere realizar en variables bash (inp1 e inp2). La operación aritmética puede ser suma, resta o multiplicación..
$ cat calculator.sh #!/bin/bash inp1=12 inp2=11 echo "1. Addition" echo "2. Subtraction" echo "3. Multiplication" echo -n "Please choose a word [1,2 or 3]? " read oper if [ $oper -eq 1 ] then echo "Addition Result " $(($inp1 + $inp2)) else if [ $oper -eq 2 ] then echo "Subtraction Result " $(($inp1 - $inp2)) else if [ $oper -eq 3 ] then echo "Multiplication Result " $(($inp1 * $inp2)) else echo "Invalid input" fi fi fi $ ./calculator.sh 1. Addition 2. Subtraction 3. Multiplication Please choose a word [1,2 or 3]? 4 Invalid input
Saber cómo usar los parámetros especiales de bash ( $*, $@, $#, $$, $!, $?, $-, $_ ) facilitará su vida de creación de scripts.
Ejemplo 4 de Bash. Leer y hacer ping a la dirección IP
La siguiente secuencia de comandos se usa para leer la dirección IP y verificar si la dirección IP es accesible e imprime el mensaje apropiado.
$ cat ipaddr.sh #!/bin/bash echo "Enter the Ipaddress" read ip if [ ! -z $ip ] then ping -c 1 $ip if [ $? -eq 0 ] ; then echo "Machine is giving ping response" else echo "Machine is not pinging" fi else echo "IP Address is empty" fi $ ./ipaddr.sh Enter the Ipaddress 10.176.191.106 Pinging 10.176.191.106 with 32 bytes of data: Reply from 10.176.191.106: bytes=32 time<1ms TTL=128 Ping statistics for 10.176.191.106: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Machine is giving ping response
En este ejemplo, -z devuelve verdadero si ipaddress tiene una longitud de cero, cuando la condición está precedida por ! Operador (negativo), si expresión es falsa, entra en si parte y se ejecuta. Entonces, cuando la dirección IP no es nula, ingresa y verifica si la dirección IP es accesible.
Ejemplo 5 de Bash. Script de instalación
El script de instalación de la mayoría de los paquetes no permitirá ejecutarlos como usuario raíz. El script verifica al usuario que está ejecutando y arroja el error.
La siguiente secuencia de comandos le permite ejecutar la secuencia de comandos del instalador de Oracle solo si el usuario que está ejecutando no es root.
$ cat preinstaller.sh #!/bin/bash if [ `whoami` != 'root' ]; then echo "Executing the installer script" ./home/oracle/databases/runInstaller.sh else echo "Root is not allowed to execute the installer script" fi Executing the script as a root user, # ./preinstaller.sh Root is not allowed to execute the installer script
En este ejemplo, la salida del comando whoami se compara con la palabra "root". Para la comparación de cadenas ==, !=, < y se debe usar y para la comparación numérica se deben usar eq, ne, lt y gt.
Ejemplo 6 de Bash. Soportes mejorados
En todos los ejemplos anteriores, usamos solo corchetes simples para encerrar la expresión condicional, pero bash permite corchetes dobles que sirven como una versión mejorada de la sintaxis de un solo corchete.
$ cat enhanced.sh #!/bin/bash echo "Enter the string" read str if [[ $str == *condition* ]] then echo "String "$str has the word \"condition\" fi $ ./enhanced.sh Enter the string conditionalstatement String conditionalstatement has the word "condition"
- [ es un sinónimo de comando de prueba. Incluso si está integrado en el shell, crea un nuevo proceso.
- [[ es una nueva versión mejorada, que es una palabra clave, no un programa.
- [[ es entendido por Korn y Bash.
- En el ejemplo anterior, si la variable $str contiene la frase "condición" en cualquier lugar, la condición es verdadera.
- Esta es la función de extensión de shell, que solo se admitirá cuando use [[ (corchetes dobles) y, por lo tanto, no es necesario citar muchos argumentos.