Bash Scripting: introducción a Bash y Bash Scripting

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. Los scripts se utilizan para automatizar la ejecución de las tareas de modo que los humanos no necesiten realizarlas individualmente. Las secuencias de comandos Bash son una excelente manera de automatizar diferentes tipos de tareas en un sistema. Los desarrolladores pueden evitar realizar tareas repetitivas utilizando scripts 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:

Tabla de contenidos

Aplicaciones de los scripts Bash:

  • Manipular archivos
  • Ejecutar tareas rutinarias como la operación de copia de seguridad.
  • Automatización

Las ventajas de utilizar Bash Scripts se detallan a continuación:

Ventajas de los scripts Bash:

  • Es simple.
  • Ayuda a evitar realizar 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 los Bash Scripts se detallan a continuación:

Desventajas de los scripts Bash:

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

¿Cómo escribir scripts Bash?

Para escribir un Script Bash seguiremos los pasos:

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

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

gedit scriptname.sh 

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

#!/bin/bash 

Esto le indicará al sistema que utilice Bash para la ejecución. Entonces podremos escribir nuestros propios guiones.

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

#!/bin/bash echo 'Hello, techcodeview.com' 

Ahora guardaremos el archivo y le otorgaremos 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 gráfica del shell del 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. A continuación se muestra un ejemplo en el que utilizamos 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 gráfica del shell del terminal después de ejecutar el script anterior de la siguiente manera:

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

Ahora veamos otros conceptos importantes relacionados con Bash Scripting.

Nombres de archivos y permisos

En el ejemplo anterior, hemos guardado el archivo usando gfg.sh nombre y también proporcionó permiso de ejecución usando chmod dominio. Ahora, entendamos por qué hemos hecho eso.

Mientras escribimos scripts 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 utilizando el chmod dominio.

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 scripts bash. A continuación se muestra un programa de muestra para comprender el uso de variables en los scripts 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 otro es Edad. Se puede acceder a estas variables usando $Name y $Age. Eso significa que podemos declarar una variable en un script bash usando Nombre de variable = Valor y puede acceder a él usando $NombreVariable. Aquí está la representación gráfica 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 un variable global . En el caso de un script bash, este concepto es un poco diferente, aquí cualquier variable, ya sea escrita dentro o fuera de una función, de forma predeterminada es una variable global. Si queremos crear una variable local, entonces necesitamos usar la palabra clave local.

Nota: Es una buena práctica 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 a ella desde la función, funciona bien, pero cuando intentamos acceder a ella 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 está definido dentro de una función, actúa como una variable global y se puede acceder a ella fuera de la función. A continuación se muestra la descripció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>$nombre de archivo echo 'Archivo creado' 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 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. El > la notación se utiliza para redirigir salida estándar a un archivo. Por otro lado, podemos utilizar 2> notación para redirigir stderr, y &> para redirigir tanto stdout como stderr.

A continuación se muestra la representación gráfica del shell 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 una función en scripts Bash se puede dar como:

Guión de ejemplo:

#!/bin/bash #It is a function myFunction () { echo Hello World from techcodeview.com } #function call myFunction 

Salida de funciones:

Hello World from techcodeview.com 

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

Entonces, la sintaxis básica para escribir funciones dentro de un Script Bash 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, ese bloque de códigos solo se ejecuta.

En los scripts de shell se utilizan dos tipos de declaraciones de toma de decisiones. Ellos son -

1. Declaración si-si no:

La declaración if else es una declaración condicional. Se puede utilizar para ejecutar dos códigos diferentes en función de si la condición dada se cumple o no.

Hay un par de variedades presentes en la declaración if-else. Ellos son -

  • si-fi
  • si-si no-fi
  • si-elif-else-fi
  • anidado si no

La sintaxis para la más simple será:

Sintaxis de la declaració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 habrá salida. A continuación se muestra la representación gráfica del shell del terminal después de ejecutar el siguiente script:

2. declaración case-sac:

case-sac básicamente funciona igual que la declaración switch en programación. A veces, si tenemos que verificar varias condiciones, puede resultar complicado usar declaraciones if. En esos momentos podemos usar una declaración case-sac. La sintaxis será –

Sintaxis de la declaración 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 gráfica del shell del terminal después de ejecutar el siguiente script:

Comparaciones de cadenas y numéricas

La comparación de cadenas significa que en el script del shell podemos tomar decisiones haciendo también comparaciones dentro de cadenas. Aquí hay una tabla descriptiva con todos los operadores –

Operador Descripción
== Devuelve verdadero si las cadenas son iguales
!= Devuelve verdadero si las cadenas no son iguales
-norte Devuelve verdadero si la cadena a probar no es nula
-Con Devuelve verdadero si la cadena a probar es nula

Los operadores aritméticos se utilizan para comprobar las condiciones basadas en 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
-el Menor o igual
-lt Menos que
- es 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 comparaciones numéricas y de cadenas:

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 cadenas. A continuación se muestra la representación gráfica del shell del terminal después de ejecutar el siguiente script:

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

Conclusión

En este artículo analizamos las secuencias de comandos Bash, que desempeñan un papel vital en la automatización de tareas dentro del entorno Linux. Como intérprete de línea de comandos, Bash ofrece simplicidad y facilidad de uso para que los desarrolladores creen scripts que agilicen las operaciones de rutina, manipulen archivos y ejecuten tareas complejas. Si bien los scripts Bash pueden mejorar la productividad al evitar acciones repetitivas y ejecutar secuencias de comandos de manera eficiente, también conllevan consideraciones como la gestión de permisos, el manejo de variables y la implementación de estructuras de toma de decisiones. Al dominar las secuencias de comandos Bash, los usuarios pueden aprovechar su poder para optimizar su flujo de trabajo y mejorar las tareas de administración del sistema en plataformas Linux.