Bash Scripting: introducción a Bash y Bash Scripting

Bash es un intérprete de línea de comandos o Unix Shell y se usa ampliamente en el sistema operativo GNU/Linux. Está escrito por Brian Jhan Fox. Se utiliza como shell de inicio de sesión predeterminado para la mayoría de las distribuciones de Linux. La creación de secuencias de comandos se utiliza para automatizar la ejecución de las tareas para que los humanos no necesiten realizarlas individualmente. Bash scripting es una excelente manera de automatizar diferentes tipos de tareas en un sistema. Los desarrolladores pueden evitar realizar tareas repetitivas utilizando secuencias de comandos de bash. 

Las secuencias de comandos Bash admiten variables, declaraciones condicionales y bucles al igual que los lenguajes de programación. A continuación se muestran algunas de las aplicaciones de Bash Scripts: 

Aplicaciones de Bash Scripts:

  • Manipulación de archivos
  • Ejecutar tareas de rutina como la operación de copia de seguridad
  • Automatización

Las ventajas de usar Bash Scripts se dan a continuación:

Ventajas de las secuencias de comandos Bash:

  • Es simple.
  • Ayuda a evitar hacer tareas repetitivas.
  • Fácil de usar
  • Las tareas realizadas con frecuencia se pueden automatizar
  • Una secuencia de comandos se puede ejecutar como un solo comando.

Las desventajas de Bash Scripts se detallan a continuación: 

Desventajas de Bash Scripts:

  • Cualquier error al escribir puede ser costoso.
  • Se lanzó un nuevo proceso para casi todos los comandos de shell ejecutados.
  • Velocidad de ejecución lenta 
  • Problemas de compatibilidad entre distintas plataformas

¿Cómo escribir secuencias de comandos Bash?

Para escribir un Bash Script seguiremos los pasos –

  • Primero, crearemos un archivo con la extensión .sh.
  • A continuación, escribiremos los scripts de bash dentro de él.
  • Después de eso, le daremos permiso de ejecución.

Para crear y escribir un archivo con la extensión .sh podemos usar el editor de texto gedit . El comando para ello será:

gedit scriptname.sh

La primera línea de nuestro archivo de script será:

#!/bin/bash

Esto le dirá al sistema que use Bash para la ejecución. Entonces podemos escribir nuestros propios guiones.

Escribamos solo un script simple que imprimirá algunas líneas en la terminal. El código para ello será –

#!/bin/bash         

echo "Hello, GeeksforGeeks"

Ahora guardaremos el archivo y le proporcionaremos el permiso de ejecución. Para hacerlo, use el siguiente comando:

chmod +x scriptname.sh

A continuación, para ejecutar el siguiente script, usaremos el siguiente comando:

./scriptname.sh

Aquí está la representación pictórica de la terminal después de ejecutar los comandos anteriores de la siguiente manera:  

 

Aquí el nombre del archivo de script es gfg.sh.

Ahora también podemos escribir comandos más complicados usando Bash Scripts. Aquí hay un ejemplo a continuación en el que estamos usando una declaración de condición:

Guión de ejemplo:

#!/bin/bash         
Age=17
if [ "$Age" -ge 18 ]; then
    echo "You can vote"
else
    echo "You cannot vote"    
fi

Producción:

You cannot vote

Aquí está la representación pictórica del shell del terminal después de ejecutar el script anterior de la siguiente manera:  

 

De la forma anterior, podemos ejecutar varios comandos de Bash a la vez.

Ahora veamos otros conceptos importantes relacionados con Bash Scripting.

Nombres de archivo y permisos

En el ejemplo anterior, guardamos el archivo con el nombre gfg.sh y también proporcionamos permiso de ejecución con el comando chmod . Ahora, entendamos por qué hemos hecho eso. 

Mientras escribimos scripts de bash, debemos guardar nuestro archivo con la extensión .sh, para que el sistema Linux pueda ejecutarlo. Cuando creamos por primera vez un archivo con la extensión .sh, no tiene ningún permiso de ejecución y sin el permiso de ejecución, el script no funcionará. Por lo tanto, debemos proporcionarle permiso de ejecución mediante el comando chmod

El nombre de archivo de un script bash puede ser cualquier cosa, pero por convención, se recomienda usar mayúsculas y minúsculas ( my_bash_script.sh ) o guiones ( my-bash-script.sh ) para nombrar un archivo de script.

Variables

Podemos usar variables en bash scripting. A continuación se muestra un programa de muestra para comprender el uso de variables en los scripts de Bash.

Guión de ejemplo:

Name="SATYAJIT GHOSH"
Age=20

echo "The name is $Name and Age is $Age"

Salida de Variables:

The name is SATYAJIT GHOSH and Age is 20

Entonces, aquí se han declarado dos variables Nombre y otra es Edad. Se puede acceder a estas variables mediante $Nombre y $Edad. Eso significa que podemos declarar una variable en un script bash usando VariableName=Value y podemos acceder a ella usando $VariableName. Aquí está la representación pictórica del shell del terminal después de ejecutar el script anterior de la siguiente manera:  

 

Hay dos tipos de variables presentes en Bash Scripting. Convencionalmente, si una variable se declara dentro de una función, generalmente es una variable local y si se declara fuera, entonces es una variable global . En el caso de un script bash, este concepto es un poco diferente, aquí cualquier variable, ya sea que esté escrita dentro o fuera de una función, por defecto es una variable global. Si queremos hacer una variable local, entonces necesitamos usar la palabra clave «local».

Nota: Se recomienda utilizar siempre una variable local dentro de una función para evitar confusiones innecesarias.  

Un ejemplo de lo mismo se da a continuación:

Guión de ejemplo:

#!/bin/bash

var1="Apple" #global variable
myfun(){
    local var2="Banana" #local variable
    var3="Cherry" #global variable
    echo "The name of first fruit is $var1"
    echo "The name of second fruit is $var2"
}
myfun #calling function

echo "The name of first fruit is $var1"
#trying to access local variable
echo "The name of second fruit is $var2"
echo "The name of third fruit is $var3"

Salida de variables locales y globales:

The name of first fruit is Apple
The name of second fruit is Banana
The name of first fruit is Apple
The name of second fruit is 
The name of third fruit is Cherry

Aquí, en este ejemplo anterior, var2 es una variable local, por lo que cuando accedemos desde la función funciona bien, pero cuando intentamos acceder fuera de la función, nos da un resultado vacío en la salida.

Por otro lado, a diferencia de los lenguajes de programación, aunque var3 se define dentro de una función, sigue actuando como una variable global y se puede acceder a ella fuera de la función. A continuación se muestra la representación del shell del terminal después de ejecutar el script:

 

Entrada y salida

La entrada y la salida son conceptos fundamentales para los scripts de shell. Un script puede tomar una o más entradas y también puede producir cero o muchas salidas. Incluso puede producir algunos errores. Entendamos esto con un ejemplo:

Guión de ejemplo:

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

Salida de entrada y salida:

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. La lectura del contenido del archivo es una entrada y la primera vez que se introducen datos en el archivo se considera una salida. Aquí hemos usado > para almacenar el contenido en un archivo. La notación > se usa para redirigir stdout a un archivo. Por otro lado, podemos usar   la notación 2> para redirigir stderr y &>  para redirigir tanto stdout como stderr.

A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script: 

 

Funciones

En programación, una función es un bloque de código que realiza algunas tareas y se puede llamar varias veces para realizar tareas. El ejemplo más simple del uso de la función en Bash scripting se puede dar como:

Guión de ejemplo:

#!/bin/bash
#It is a function
myFunction () {
echo Hello World from GeeksforGeeks
}

#function call
myFunction 

Salida de funciones:

Hello World from GeeksforGeeks

El ejemplo anterior muestra una función que imprime algo cuando se le llama.

Entonces, la sintaxis básica para escribir funciones dentro de un Bash Script será:

Sintaxis de funciones:

#for defining
function_name(){
    commands
    .....
}

function_name # for calling

Además de esto, también podemos tener funciones con argumentos de paso y con valores de retorno.

Toma de decisiones

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 –

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 para el más simple será:

Sintaxis de la instrucción If-else:

if [ expression ]; then

    statements

fi

Guión de ejemplo:

Name="Satyajit"
if [ "$Name" = "Satyajit" ]; then
  echo "His name is Satyajit. It is true."
fi

Salida de la declaración if-else:

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 tendrá una salida. A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script: 

 

2. 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á –

Sintaxis de la sentencia case-sac:

case $var in
   Pattern 1) Statement 1;;
   Pattern n) Statement n;;
esac

Guión de ejemplo:

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

Salida de la declaración case-sac:

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: 

 

Comparaciones numéricas y de strings

La comparación de 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

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 un ejemplo simple de lo mismo:

Guión de ejemplo:

if [ 10 -eq 10 ];then
echo "Equal"
fi

if [ 'Geeks' == 'Geeks' ];
then
    echo "same" #output
else
    echo "not same"
fi

Salida de strings y comparaciones numéricas:

Equal
same

En este ejemplo, el primero (-eq) es una comparación numérica que verifica la igualdad. El segundo ( == ) también verifica la igualdad pero en strings. A continuación se muestra la representación pictórica de la carcasa del terminal después de ejecutar el siguiente script: 

 

Aprenderemos más sobre este concepto en los próximos artículos.

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 *