Búsqueda de sitios web

Cómo crear scripts de Shell simples en Linux


La creación de scripts de shell es una de las habilidades más esenciales que los usuarios de Linux deben tener al alcance de la mano. Los scripts de Shell desempeñan un papel enorme en la automatización de tareas repetitivas que, de otro modo, serían tediosas de ejecutar línea por línea.

En este tutorial, destacamos algunas de las operaciones básicas de scripts de shell que todo usuario de Linux debería tener.

1. Cree un script de Shell simple

Un script de shell es un archivo que consta de texto ASCII. Comenzaremos creando un script de shell simple y, para hacerlo, usaremos un editor de texto. Hay una gran cantidad de editores de texto, tanto de línea de comandos como basados en GUI. Para esta guía, usaremos el editor vim.

Comenzaremos creando un script simple que muestre "Hola mundo" cuando se ejecute.

vim hello.sh

Pegue el siguiente contenido en el archivo y guárdelo.

#!/bin/bash
Print Hello world message
echo "Hello World!"

Repasemos el script de shell línea por línea.

  • La primera línea, #!/bin/bash, se conoce como encabezado shebang. Esta es una construcción especial que indica qué programa se utilizará para interpretar el guión. En este caso, este será el shell bash indicado por /bin/bash. Hay otros lenguajes de secuencias de comandos como Python, que se indica con #!/usr/bin/python3 y Perl, cuyo encabezado shebang se indica con #!/usr/bin/perl.
  • La segunda línea es un comentario. Un comentario es una declaración que describe lo que hace y lo que no se ejecuta un script de shell cuando se ejecuta el script. Los comentarios siempre van precedidos por el signo almohadilla #.
  • La última línea es el comando que imprime el mensaje 'Hola mundo' en la terminal.

El siguiente paso es hacer que el script sea ejecutable asignando permiso de ejecución usando el comando chmod como se muestra.

chmod +x  hello.sh

Finalmente, ejecute el script de shell usando cualquiera de los comandos:

bash hello.sh
OR
./hello.sh

2. Uso de declaraciones condicionales para ejecutar código

Al igual que otros lenguajes de programación, las declaraciones condicionales se utilizan en scripts bash para tomar decisiones, con sólo una ligera variación en la sintaxis. Vamos a cubrir las declaraciones condicionales if, if-else y elif.

Ejemplo de una declaración if solamente

La declaración if se puede utilizar para probar condiciones únicas o múltiples. Comenzaremos con el uso fundamental de la declaración if para probar una única condición. La declaración if está definida por los bloques if... fi.

if command
then
  statement
fi

Echemos un vistazo al script de shell a continuación.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

El script de shell anterior solicita al usuario que proporcione una puntuación que luego se almacena en una variable x. Si la puntuación corresponde a 70, el script devuelve el resultado "¡Buen trabajo!". El operador de comparación == se utiliza para probar si la puntuación ingresada, que se almacena en la variable x, es equivalente a 100.

Otros operadores de comparación que puede utilizar incluyen:

  • -eq – Igual a
  • -ne – No es igual a
  • -lt – Menos de
  • -le – Menor o igual a
  • -lt – Menos de
  • -ge – Mayor o igual a

Por ejemplo, el bloque if-statement siguiente imprime "Trabaja más duro" si la puntuación de entrada es cualquier valor inferior a 50.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

Ejemplo de una declaración if-else

Para situaciones en las que tienes 2 resultados posibles: – ya sea esto o aquello – la declaración if-else resulta útil.

if command
then
  statement1
else
  statement2
fi

El siguiente script lee la puntuación de entrada y comprueba si es mayor o igual a 70.

Si la puntuación es mayor o igual a 70, recibirás el mensaje "¡Excelente trabajo, pasaste!". Sin embargo, si la puntuación cae por debajo de 70, se imprimirá el resultado "Fallaste".

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

Ejemplo de una declaración if-elif-else

En escenarios donde existen múltiples condiciones y diferentes resultados, se utiliza la declaración if-elif-else. Esta declaración toma el siguiente formato.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Por ejemplo, tenemos un script para una lotería que comprueba si el número ingresado es 90, 60 o 30.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -eq 90 ]];
then
  echo “You have won the First Prize”

elif [[ $x -eq 60 ]];
then
  echo “You have won the Second Prize”

elif [[ $x -eq 30 ]];
then 
  echo “You have won the Second Prize”
else
  echo “Please try again”
fi

3. Usando la declaración If con lógica AND

Puede utilizar la instrucción if junto con el operador lógico AND para ejecutar una tarea si se cumplen dos condiciones. El operador && se utiliza para indicar la lógica AND.

#!/bin/bash

echo 'Please Enter your user_id'
read user_id

echo 'Please Enter your tag_no'
read tag_id

if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
  echo “Login successful”
else
  echo “Login failure”
fi

5. Usando la declaración If con lógica OR

Cuando se utiliza la lógica OR, que está representada por el símbolo ||, cualquiera de las condiciones debe cumplirse con el script para obtener los resultados esperados.

#!/bin/bash

echo 'Please enter a random number'
read number

if [[ (number -eq 55 || number -eq 80) ]];
then
 echo 'Congratulations! You’ve won'
else
 echo 'Sorry, try again'
fi

Utilice construcciones en bucle

Los bucles de Bash permiten a los usuarios realizar una serie de tareas hasta lograr un resultado determinado. Esto resulta útil para realizar tareas repetitivas. En esta sección, echaremos un vistazo a algunos de los bucles que también encontrará en otros lenguajes de programación.

Mientras bucle

Este es uno de los bucles más fáciles de trabajar. La sintaxis es bastante simple:

while  <some test>
do
 commands
done

El siguiente bucle while enumera todos los números del 1 al 10 cuando se ejecuta.

#!/bin/bash
A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

Analicemos el ciclo while:

La variable contador se inicializa en 1. Y mientras la variable sea menor o igual a 10, el valor del contador se incrementará hasta que se cumpla la condición. La línea echo $counter imprime todos los números del 1 al 10.

En bucle

Al igual que el bucle while, un bucle for se utiliza para ejecutar código de forma iterativa. Es decir. repetir la ejecución del código tantas veces como sea posible definido por el usuario.

La sintaxis es:

for var in 1 2 3 4 5 N
do
 command1
 command2
done

El bucle for siguiente itera del 1 al 10 y procesa sus valores en la pantalla.

Una mejor manera de lograr esto es definir un rango usando las llaves dobles { } como se muestra en lugar de escribir todos los números.

#!/bin/bash
Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Parámetros posicionales de Bash

Un parámetro posicional es una variable especial a la que se hace referencia en el script cuando se pasan valores en el shell pero no se pueden asignar. Los parámetros posicionales van desde $0 $1 $2 $3 …… hasta $9. Más allá del valor $9, los parámetros deben estar entre llaves, por ejemplo, $ {10}, $ {11}..., etc.

Al ejecutar el script, el primer parámetro posicional que es $0 toma el nombre del script de shell. El parámetro $1 toma la primera variable que se pasa en el terminal, $2 toma la segunda, $3 la tercera y así sucesivamente.

Creemos un script test.sh como se muestra.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

A continuación, ejecute el script y proporcione el primer y segundo nombre como argumentos:

bash test.sh James Kiarie

En el resultado, podemos ver que la primera variable que se imprime es el nombre del script de shell, en este caso, test.sh. A partir de entonces, los nombres se imprimen correspondientes a los parámetros posicionales definidos en el script de shell.

Los parámetros posicionales son útiles porque le ayudan a personalizar los datos que se ingresan en lugar de asignar explícitamente un valor a una variable.

Códigos de salida del comando Shell

Comencemos respondiendo una pregunta sencilla: ¿Qué es un código de salida?

Cada comando ejecutado en el shell por un usuario o script de shell tiene un estado de salida. Un estado de salida es un número entero.

Un estado de salida de 0 implica que el comando se ejecutó correctamente y sin errores. Cualquier valor entre 1 y 255 muestra que el comando falló o no se ejecutó correctamente.

Para encontrar el estado de salida de un comando, use la variable Shell $?.

Un estado de salida de 1 indica un error general o cualquier error no permitido, como editar archivos sin permisos sudo.

Un estado de salida de 2 indica un uso incorrecto de un comando o una variable de shell integrada.

El estado de salida 127 apunta a un comando ilegal que generalmente produce el error "comando no encontrado".

Procesamiento de la salida de los comandos del Shell dentro de un script

En las secuencias de comandos bash, puede almacenar la salida de un comando en una variable para uso futuro. Esto también se conoce como sustitución de comandos de shell y se puede lograr de las siguientes maneras.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Por ejemplo, puede almacenar el comando fecha en una variable llamada hoy y llamar al script de shell para revelar la fecha actual.

#!/bin/bash

today=$(date)

echo “Today is $today”

Tomemos otro ejemplo. Supongamos que desea encontrar los usuarios de inicio de sesión válidos en su sistema Linux. ¿Cómo lo harías? Primero, la lista de todos los usuarios (tanto del sistema, como del proceso y de inicio de sesión) se almacena en el archivo /etc/passwd.

Para ver el archivo, necesitarás usar el comando cat. Sin embargo, para limitar los usuarios que inician sesión, use el comando grep para buscar usuarios con el atributo /bin/bash y use el comando cut -c 1-10 como Se muestra para mostrar los primeros 10 caracteres de los nombres.

Hemos almacenado el comando cat en la variable login_users.

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users

Esto pone fin a nuestro tutorial sobre la creación de scripts de shell simples. Esperamos que haya encontrado esto valioso.