Un script de Shell es un archivo de texto sin formato. Este archivo contiene diferentes comandos para la ejecución paso a paso. Estos comandos se pueden escribir directamente en la línea de comandos, pero desde el punto de vista de la reutilización, es útil almacenar todos los comandos interrelacionados para una tarea específica en un solo archivo. Podemos usar ese archivo para ejecutar el conjunto de comandos una o más veces según nuestros requisitos.
Aquí, en este artículo, vamos a discutir la toma de decisiones dentro de Shell Scripting.
En programación, la toma de decisiones es uno de los conceptos importantes. El programador proporciona una o más condiciones para la ejecución de un bloque de código. Si se cumplen las condiciones, solo se ejecuta ese bloque de códigos. Se utilizan dos tipos de declaraciones de toma de decisiones dentro de los scripts de shell. Están –
- Declaración if-else
- declaración case-sac
Ahora hablemos de ellos uno por uno.
1. Declaración if-else
If else es una declaración condicional. Se puede utilizar para ejecutar dos códigos diferentes en función de si se cumple o no la condición dada. Hay un par de variedades presentes en la instrucción if-else. Están –
- si-fi
- if-else-fi
- si-elif-else-fi
- if-else anidado
La sintaxis será –
si-fi
if [ expression ]; then statements fi
if-else-fi
if [ expression ] then statement1 else statement2 fi
si-elif-else-fi
if [ expression1 ] then statement1 statement2 . . elif [ expression2 ] then statement3 statement4 . . else statement5 fi
if-else anidado
if [ expression ] then statement1 if [ expression ] then statement else statement fi else statement2 fi
Ahora comprenda estos conceptos usando ejemplos.
Ejemplo de si-fi
Name="Satyajit" if [ "$Name" = "Satyajit" ]; then echo "His name is Satyajit. It is true." fi
Producción
His name is Satyajit. It is true.
En el ejemplo anterior, durante la verificación de la condición, el nombre coincide y la condición se vuelve verdadera. Por lo tanto, se ejecuta el bloque de código presente dentro del bloque if. En caso de que el nombre no coincida, no tendremos una salida. A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script:
Ejemplo de if-else-fi
Age=17 if [ "$Age" -ge 18 ]; then echo "You can vote" else echo "You cannot vote" fi
Producción
You cannot vote
En el ejemplo anterior, durante la verificación de la condición, la edad es 17, por lo que no cumple la condición de la declaración if, es decir, la edad debe ser mayor o igual a 18. Por lo tanto, el código dentro del bloque if no se ejecutará y se ejecutará el código escrito dentro del bloque else. A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script:
Ejemplo de if-elif-else-fi
Age=17 if [ "$Age" -ge 18 ]; then echo "You can vote" elif [ "$Age" -eq 17 ]; then echo "You can vote after one year" else echo "You cannot vote" fi
Producción
You can vote after one year
En el ejemplo anterior, durante la verificación de la condición, la edad es 17, por lo que no cumple la condición de la declaración if, es decir, la edad debe ser mayor o igual a 18, pero ha cumplido la condición elif. Por lo tanto, solo ha ejecutado el código escrito dentro del bloque elif.
Ejemplo de if-else anidado
echo "Enter subject" read subject if [ $subject == 'Linux' ] then echo "Enter Marks" read marks if [ $marks -ge 30 ] then echo "You passed" else echo "You failed" fi else echo "Wrong Subject" fi
Salida 1
Enter subject Linux Enter Marks 97 You passed
Salida 2
Enter subject Linux Enter Marks 29 You failed
Salida 3
Enter subject DBMS Wrong Subject
En el ejemplo anterior, las sentencias if están anidadas, lo que significa que una sentencia if está escrita dentro de otra. La siguiente secuencia de comandos primero comprueba si el Asunto es Linux o no. Si el sujeto es Linux, entonces va a la otra instrucción if y esa instrucción if comprueba si la marca está arriba para considerarla como aprobada o no. A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script:
1.1. Tomar una decisión basada en archivos
La decisión basada en archivos es básicamente un tipo de toma de decisiones basada en si el archivo existe o no. Un caso de uso de esto será verificar el permiso de archivo disponible o crear un archivo si no está disponible, etc. Una estructura mínima de dicha secuencia de comandos se puede escribir como:
if [ -e gfg.sh ] then echo "file exists" else echo "file does not exist" fi
Esto se puede usar para verificar si un archivo existe en el directorio de inicio o no.
Ejemplo de decisión basada en expediente
echo "Enter filename" read filename if [ -e $filename ] then echo "$filename is exits on the directory" cat $filename else cat > $filename echo "File created" fi
Producción :
Primera vez:
Enter filename geeks.txt Hello Geek File created
Segunda vez:
Enter filename geeks.txt geeks.txt is exits on the directory Hello Geek
Entonces, en este ejemplo anterior, la primera vez, el script no pudo encontrar ningún archivo con ese nombre de archivo, y se ejecuta el bloque else. Creó el archivo y puso algunos datos en ese archivo. Cuando lo ejecutamos por segunda vez con el mismo nombre de archivo, encuentra el archivo. Entonces, el bloque if se ejecuta y muestra el contenido del archivo. A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script:
1.2. Condición basada en strings
La condición basada en strings significa que en el script de shell podemos tomar decisiones haciendo también comparaciones dentro de las strings. Aquí hay una tabla descriptiva con todos los operadores:
Operador | Descripción |
---|---|
== | Devuelve verdadero si las strings son iguales |
!= | Devuelve verdadero si las strings no son iguales |
-norte | Devuelve verdadero si la string a probar no es nula |
-z | Devuelve verdadero si la string a probar es nula |
A continuación se muestra el uso de todos ellos:
# == if [ 'Geeks' == 'Geeks' ]; then echo "same" #output else echo "not same" fi # != if [ 'Geeks' != 'Apple' ]; then echo "not same" #output else echo "same" fi # -n if [ -n "Geeks" ]; then echo "not null" #output else echo "null" fi # -z if [ -z "Geeks" ]; then echo "null" else echo "not null" #output fi
Producción:
same not same not null not null
A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script:
1.3. Condición basada en aritmética
Los operadores aritméticos se utilizan para verificar las condiciones basadas en la aritmética. Como menor que, mayor que, igual a, etc. Aquí hay una tabla descriptiva con todos los operadores:
Operador | Descripción |
---|---|
-eq | Igual |
-ge | Mayor que o igual |
-gt | Mas grande que |
-le | Menor o igual |
-lt | Menos que |
-nordeste | No es igual |
A continuación se muestra el uso de todos ellos:
# -eq if [ 10 -eq 10 ];then echo "Equal" fi # -ge if [ 10 -ge 9 ];then echo "Greater or equal" fi # -gt if [ 10 -gt 8 ];then echo "Greater" fi # -le if [ 10 -le 12 ];then echo "Less than or equal" fi # -lt if [ 10 -lt 13 ];then echo "Less than" fi # -ne if [ 10 -ne 13 ];then echo "Not Equal" fi
Producción:
Equal Greater or equal Greater Less than or equal Less than Not Equal
A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script:
2. La declaración case-sac
case-sac básicamente funciona igual que la declaración de cambio en la programación. A veces, si tenemos que verificar varias condiciones, puede complicarse el uso de declaraciones if. En esos momentos podemos usar una sentencia case-sac. La sintaxis será –
case $var in Pattern 1) Statement 1;; Pattern n) Statement n;; esac
Ejemplo de sentencia case-sac
Name="Satyajit" case "$Name" in #case 1 "Rajib") echo "Profession : Software Engineer" ;; #case 2 "Vikas") echo "Profession : Web Developer" ;; #case 3 "Satyajit") echo "Profession : Technical Content Writer" ;; esac
Producción
Profession : Technical Content Writer
En el ejemplo anterior, la declaración case-sac ejecutó la declaración que es parte del patrón coincidente aquí el ‘Nombre’. A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script:
Publicación traducida automáticamente
Artículo escrito por satyajit1910 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA