GNU/Linux >> Tutoriales Linux >  >> Linux

Shell Scripting para principiantes:cómo escribir Bash Scripts en Linux

Shell scripting es una parte importante de la automatización de procesos en Linux. Las secuencias de comandos lo ayudan a escribir una secuencia de comandos en un archivo y luego ejecutarlos.

Esto le ahorra tiempo porque no tiene que escribir ciertos comandos una y otra vez. Puede realizar tareas diarias de manera eficiente e incluso programarlas para que se ejecuten automáticamente.

También puede configurar ciertos scripts para que se ejecuten al inicio, como mostrar un mensaje en particular al iniciar una nueva sesión o configurar ciertas variables de entorno.

Las aplicaciones y los usos de las secuencias de comandos son numerosos, así que profundicemos.

En este artículo, aprenderá:

  1. ¿Qué es un shell bash?
  2. ¿Qué es un script bash y cómo se identifica?
  3. Cómo crear su primer script bash y ejecutarlo.
  4. La sintaxis básica de las secuencias de comandos de shell.
  5. Cómo ver los scripts programados de un sistema.
  6. Cómo automatizar secuencias de comandos programando a través de trabajos cron.

La mejor forma de aprender es practicando. Le recomiendo encarecidamente que siga usando Replit. Puede acceder a un shell de Linux en ejecución en cuestión de minutos.

Introducción a Bash Shell

La línea de comandos de Linux la proporciona un programa llamado shell. A lo largo de los años, el programa shell ha evolucionado para adaptarse a varias opciones.

Se pueden configurar diferentes usuarios para usar diferentes shells. Pero la mayoría de los usuarios prefieren quedarse con el shell predeterminado actual. El shell predeterminado para muchas distribuciones de Linux es GNU Bourne-Again Shell (bash). Bash es sucedido por Bourne shell (sh ).

Cuando inicia el shell por primera vez, utiliza un script de inicio ubicado en .bashrc o .bash_profile archivo que le permite personalizar el comportamiento del shell.

Cuando un shell se usa de forma interactiva, muestra un $ cuando está esperando un comando del usuario. Esto se llama indicador de shell.

[username@host ~]$

Si el shell se ejecuta como root, el aviso se cambia a # . El indicador de shell de superusuario se ve así:

[root@host ~]#

Bash es muy poderoso ya que puede simplificar ciertas operaciones que son difíciles de realizar de manera eficiente con una GUI. Recuerde que la mayoría de los servidores no tienen una GUI y es mejor aprender a usar los poderes de una interfaz de línea de comandos (CLI).

¿Qué es un script Bash?

Un script bash es una serie de comandos escritos en un archivo. Estos son leídos y ejecutados por el programa bash. El programa se ejecuta línea por línea.

Por ejemplo, puede navegar a una ruta determinada, crear una carpeta y generar un proceso dentro de ella usando la línea de comando.

Puede hacer la misma secuencia de pasos guardando los comandos en un script bash y ejecutándolo. Puede ejecutar el script tantas veces como desee.

¿Cómo se identifica un script Bash?

Extensión de archivo de .sh .

Por convenciones de nomenclatura, los scripts bash terminan con un .sh . Sin embargo, los scripts de bash pueden ejecutarse perfectamente sin el sh extensión.

Los scripts comienzan con un bash bang.

Los scripts también se identifican con un shebang . Shebang es una combinación de bash # y bang ! siguió la ruta del shell bash. Esta es la primera línea del script. Shebang le dice al shell que lo ejecute mediante bash shell. Shebang es simplemente una ruta absoluta al intérprete bash.

A continuación se muestra un ejemplo de la declaración shebang.

#! /bin/bash

La ruta del programa bash puede variar. Más adelante veremos cómo identificarlo.

Derechos de ejecución

Los scripts tienen derechos de ejecución para el usuario que los ejecuta.

Un derecho de ejecución está representado por x . En el siguiente ejemplo, mi usuario tiene el rwx (leer, escribir, ejecutar) derechos para el archivo test_script.sh

Color de archivo

Los scripts ejecutables aparecen en un color diferente al resto de los archivos y carpetas.

En mi caso, los scripts con derechos de ejecución aparecen en color verde.

Cómo crear su primer script Bash

Vamos a crear un script simple en bash que genere Hello World .

Crea un archivo llamado hello_world.sh

touch hello_world.sh

Encuentre la ruta a su shell bash.

which bash

En mi caso, la ruta es /usr/bin/bash e incluiré esto en el tinglado.

Escribe el comando.

Haremos echo "hola mundo" a la consola.

Nuestro script se verá así:

#! usr/bin/bash
echo "Hello World"

Edite el archivo hello_world.sh usando un editor de texto de su elección y agregue las líneas anteriores en él.

Proporcione derechos de ejecución a su usuario.

Modifique los permisos del archivo y permita la ejecución del script usando el siguiente comando:

chmod u+x hello_world.sh

chmod modifica los derechos existentes de un archivo para un usuario en particular. Estamos agregando +x al usuario u .

Ejecutar el script.

Puede ejecutar el script de las siguientes maneras:

./hello_world.sh

bash hello_world.sh .

Aquí está el resultado:

La sintaxis básica de Bash Scripting

Al igual que cualquier otro lenguaje de programación, bash scripting sigue un conjunto de reglas para crear programas comprensibles para la computadora. En esta sección, estudiaremos la sintaxis de las secuencias de comandos de bash.

Cómo definir variables

Podemos definir una variable usando la sintaxis variable_name=value . Para obtener el valor de la variable, agregue $ antes de la variable.

#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name

Tux es también el nombre de la mascota de Linux, el pingüino.

Expresiones aritméticas

A continuación se muestran los operadores admitidos por bash para cálculos matemáticos:

Veamos algunos ejemplos.

Las expresiones numéricas también se pueden calcular y almacenar en una variable utilizando la siguiente sintaxis:

var=$((expression))

Probemos un ejemplo.

#!/bin/bash

var=$((3+9))
echo $var

Las fracciones no se calculan correctamente con los métodos anteriores y se truncan.

Para cálculos decimales , podemos usar bc comando para obtener la salida a un número particular de lugares decimales. bc (Bash Calculator) es una calculadora de línea de comandos que admite el cálculo hasta un cierto número de puntos decimales.

echo "scale=2;22/7" | bc

Donde scale define el número de lugares decimales requeridos en la salida.

Cómo leer la entrada del usuario

En ocasiones, deberá recopilar información del usuario y realizar operaciones relevantes.

En bash, podemos tomar la entrada del usuario usando read comando.

read variable_name

Para solicitar al usuario un mensaje personalizado, use -p bandera.

read -p "Enter your age" variable_name

Ejemplo:

#!/bin/bash

echo "Enter a numner"
read a

echo "Enter a numner"
read b

var=$((a+b))
echo $var

Operadores lógicos de comparación numérica

La comparación se usa para verificar si las declaraciones se evalúan como true o false . Podemos usar los operadores que se muestran a continuación para comparar dos declaraciones:

Operador Uso
+ adición
- resta
* multiplicación
/ división
** exponenciación
% módulo

Sintaxis :

if [ conditions ]
    then
         commands
fi

Ejemplo :

Comparemos dos números y encontremos su relación:

read x
read y

if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi

Salida:

Declaraciones condicionales (Toma de decisiones)

Las condiciones son expresiones que se evalúan como una expresión booleana (true o false ). Para verificar las condiciones, podemos usar if , if-else , if-elif-else y condicionales anidados.

La estructura de las sentencias condicionales es la siguiente:

  • if...then...fi declaraciones
  • if...then...else...fi declaraciones
  • if..elif..else..fi
  • if..then..else..if..then..fi..fi.. (Condicionales anidadas)

Sintaxis :

if [[ condition ]]
then
	statement
elif [[ condition ]]; then
	statement 
else
	do this by default
fi

Para crear comparaciones significativas, podemos usar AND -a y O -o también.

La siguiente declaración se traduce como:Si a es mayor que 40 y b es menor que 6.

if [ $a -gt 40 -a $b -lt 6 ]

Ejemplo :Busquemos el tipo de triángulo leyendo las longitudes de sus lados.

read a
read b
read c

if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL

elif [ $a == $b -o $b == $c -o $a == $c ]
then 
echo ISOSCELES
else
echo SCALENE

fi

Salida :

Caso de prueba #1

Caso de prueba #2

Caso de prueba #3

Repetir y saltar

Los bucles for le permiten ejecutar sentencias un número específico de veces.

Bucle con números:

En el ejemplo a continuación, el bucle iterará 5 veces.

#!/bin/bash

for i in {1..5}
do
    echo $i
done

Bucle con cadenas:

También podemos recorrer cadenas.

#!/bin/bash

for X in cyan magenta yellow  
do
	echo $X
done

bucle-While

Los bucles while comprueban una condición y repiten hasta que la condición permanece true . Necesitamos proporcionar una declaración de contador que incremente el contador para controlar la ejecución del bucle.

En el siguiente ejemplo, (( i += 1 )) es la declaración de contador que incrementa el valor de i .

Ejemplo:

#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
  (( i += 1 ))
done

Lectura de archivos

Supongamos que tenemos un archivo sample_file.txt como se muestra a continuación:

Podemos leer el archivo línea por línea e imprimir el resultado en la pantalla.

#!/bin/bash

LINE=1

while read -r CURRENT_LINE
	do
		echo "$LINE: $CURRENT_LINE"
    ((LINE++))
done < "sample_file.txt"

Salida:

Cómo ejecutar comandos con back ticks

Si necesita incluir la salida de un comando complejo en su secuencia de comandos, puede escribir la declaración dentro de las marcas posteriores.

Sintaxis:

var=` commands `

Ejemplo :supongamos que queremos obtener el resultado de una lista de puntos de montaje con tmpfs en su nombre Podemos crear una declaración como esta:df -h | grep tmpfs .

Para incluirlo en el script bash, podemos incluirlo entre tildes.

#!/bin/bash

var=`df -h | grep tmpfs`
echo $var

Salida:

Cómo obtener argumentos para scripts desde la línea de comandos

Es posible dar argumentos al script en ejecución.

$@ representa la posición de los parámetros, a partir de uno.

#!/bin/bash

for x in $@
do
    echo "Entered arg is $x"
done

Ejecútalo así:

./script arg1 arg2

Cómo automatizar scripts programando a través de cron Jobs

Cron es una utilidad de programación de trabajos presente en sistemas similares a Unix. Puede programar trabajos para que se ejecuten diariamente, semanalmente, mensualmente o en un momento específico del día. La automatización en Linux depende en gran medida de los trabajos cron.

A continuación se muestra la sintaxis para programar crons:

# Cron job example
* * * * * sh /path/to/script.sh

Aquí, * represent representa minuto(s) hora(s) día(s) mes(es) día(s) de la semana, respectivamente.

A continuación se muestran algunos ejemplos de programación de trabajos cron.

Operación Sintaxis Explicación
Igualdad num1 -eq numero2 es num1 igual a num2
Mayor que igual a num1 -ge numero2 es num1 mayor que igual a num2
Mayor que num1 -gt numero2 es num1 mayor que num2
Menor que igual a num1 -le num2 es num1 menor que igual a num2
Menos de num1 -lt numero2 es num1 menor que num2
No es igual a num1 -ne num2 es num1 diferente a num2

Puede obtener más información sobre cron en detalle en esta publicación de blog.

Cómo verificar scripts existentes en un sistema

Usando crontab

crontab -l enumera los scripts ya programados para un usuario en particular.

Usando el comando buscar

El find comando ayuda a localizar archivos en función de ciertos patrones. Como la mayoría de los scripts terminan con .sh , podemos usar el script de búsqueda de esta manera:

find . -type f -name "*.sh"

donde,

  • . representa el directorio actual. Puede cambiar la ruta en consecuencia.
  • -type f indica que el tipo de archivo que estamos buscando es un archivo basado en texto.
  • *.sh dice que coincida con todos los archivos que terminan con .sh .

Si está interesado en leer sobre el comando de búsqueda en detalle, consulte mi otra publicación.

Resumiendo

En este tutorial aprendimos los conceptos básicos de las secuencias de comandos de shell. Analizamos ejemplos y sintaxis que pueden ayudarnos a escribir programas significativos.

¿Cuál es tu cosa favorita que aprendiste de este tutorial? ¡Házmelo saber en Twitter!

Puedes leer mis otras publicaciones aquí.

Vector de trabajo creado por macrovector - www.freepik.com


Linux
  1. ¿Cómo analizar Json con secuencias de comandos de Shell en Linux?

  2. ¿Cómo probar el cumplimiento de Posix de los scripts de Shell?

  3. Cómo comparar cadenas en Bash Shell Scripting

  4. 12 ejemplos de Bash For Loop para su secuencias de comandos de Linux Shell

  5. Cómo escribir secuencias de comandos de inicio de Linux basadas en el estándar de inicio LSB

Bash scripting:cómo escribir datos en archivos de texto

Cómo usar el comando Declare en Linux Bash Shell

Cómo usar el comando echo en Bash Scripts en Linux

Cómo instalar Linux Bash Shell en Windows 10

Bash Scripting:cómo generar y formatear texto en Linux Shell

¿Cómo usar Linux Bash Shell dentro de Windows 10?

    HORARIO VALOR PROGRAMADO
    5 0 * 8 * A las 00:05 de agosto.
    5 4 * * 6 A las 04:05 del domingo.
    0 22 * ​​* 1-5 A las 22:00 todos los días de la semana de lunes a viernes.