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 deberían tener en la punta de sus dedos. Los scripts de Shell juegan 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 script 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 comprende texto ASCII. Comenzaremos creando un script de shell simple, y para ello usaremos un editor de texto. Hay bastantes editores de texto, tanto de línea de comandos como basados u200bu200ben GUI. Para esta guía, usaremos el editor vim.

Comenzaremos creando un script simple que muestra "Hola mundo" cuando se ejecuta.

$ 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.

  • The first line – #!/bin/bash – is known as the shebang header. This is a special construct that indicates what program will be used to interpret the script. In this case, this will be the bash shell indicated by /bin/bash. There are other scripting languages such as Python which is denoted by #!/usr/bin/python3 and Perl whose shebang header is is denoted by #!/usr/bin/perl.
  • The second line is a comment. A comment is a statement that describes what a shell script does and is not executed when the script is run. Comments are always preceded by the hash sign #.
  • The last line is the command that prints the ‘Hello World’ message on the 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 el código

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

La instrucción if se puede utilizar para probar condiciones únicas o múltiples. Comenzaremos con el uso fundamental de la instrucción if para probar una sola condición. La instrucció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 u003du003d se usa 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 – Equal to
  • -ne – Not equal to
  • -lt – Less than
  • -le – Less than or equal to
  • -lt – Less than
  • -ge – Greater than or equal to

Por ejemplo, el bloque de instrucción if a continuación imprime "Trabajar más duro" si la puntuación de entrada es cualquier valor menor que 50.

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

Para situaciones en las que tiene 2 resultados posibles: - ya sea esto o aquello - la instrucción if-else es ú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, aparece el mensaje "¡Excelente trabajo, aprobó!". Sin embargo, si la puntuación cae por debajo de 70, se imprimirá la salida "Falló".

#!/bin/bash

echo 'Enter the score'

read x

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

En escenarios donde hay múltiples condiciones y diferentes resultados, se usa la instrucción if-elif-else. Esta declaración tiene el siguiente formato.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Por ejemplo, tenemos un guión para una lotería que verifica 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. Uso de la instrucció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 usa para denotar 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. Uso de la instrucción If con lógica OR

Cuando se utiliza la lógica OR, representada por el símbolo || , se debe cumplir una de las condiciones 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

Usar construcciones de bucle

Los bucles Bash permiten a los usuarios realizar una serie de tareas hasta que se logra 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.

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

while  <some test>
do
 commands
done

El ciclo while siguiente 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:

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

Al igual que el bucle while, un bucle for se utiliza para ejecutar código de forma iterativa. Es decir. Repita 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 ciclo for de abajo 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 sh …… hasta. Más allá del valor, los parámetros deben estar encerrados entre llaves, por ejemplo, & # 36 {10}, & # 36 {11}… y así sucesivamente.

Al ejecutar el script, el primer parámetro posicional que es sh toma el nombre del script de shell. El parámetro toma la primera variable que se pasa al terminal, toma la segunda, 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 nombre y el segundo nombre como argumentos:

# bash test.sh James Kiarie

En la salida, 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, se imprimen los nombres correspondientes a los parámetros posicionales definidos en el script de shell.

Los parámetros posicionales son útiles porque lo 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 simple: ¿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 sin errores. Cualquier valor entre 1 y 255 indica que el comando falló o no se ejecutó correctamente.

Para encontrar el estado de salida de un comando, use la variable de shell 0 .

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

Un estado de salida de 2 apunta al uso incorrecto de un comando o variable de shell incorporada.

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

Procesamiento de salida de comandos de 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 denomina sustitución de comandos de shell y se puede lograr de las siguientes formas.

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

Por ejemplo, puede almacenar el comando de 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. Suponga 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, del proceso como de los usuarios de inicio de sesión) se almacena en el archivo/etc/passwd.

Para ver el archivo, debe usar el comando cat. Sin embargo, para limitar la entrada de usuarios, 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 le haya resultado valioso.