Shell Scripting – Toma de decisiones

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

Deja una respuesta

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