Press "Enter" to skip to content

Scripting bash. Comandos en un Script Bash


Ejecución Directa o Creación de Scripts en Bash

Cuando ejecutamos comandos de Linux mediante instrucciones, podemos hacerlo escribiéndolas directamente en la terminal o guardándolas en un archivo, creando así un script. Pero a pesar de ello, ambas formas nos brindan el mismo resultado, aunque la ejecución desde un script de estas instrucciones ofrece algunas ventajas.

Una de las principales ventajas de usar scripts es la posibilidad de agrupar múltiples instrucciones de comandos en un solo archivo, de forma que al ejecutar el script, todas las instrucciones incluidas se ejecutarán de manera secuencial, organizando así mejor el código.

Además, los scripts permiten añadir cierta lógica a la ejecución de las instrucciones mediante el uso de ciertas estructuras para condicionar la ejecución de estas instrucciones. Por ejemplo, ejecutar unas instrucciones si una variable es inferior a 10, o ejecutar otras instrucciones si la variable es mayor a 10, o ejecutar de forma repetitiva unas instrucciones un número determinado de veces o mientras se cumpla una condición.

Controlar la ejecución de un script (EXIT STATUS – EXIT CODE)

Pero además, gracias a las estructuras de control que podemos utilizar en el script y dependiendo de los datos de salida obtenidos como resultado de ejecutar un comando en una instrucción, también podemos darle cierta lógica a la ejecución de las instrucciones del script.

Estos datos de salida se pueden obtener o capturar ejecutando la instrucción como si fuera una expresión colocándola entre acentos graves, por ejemplo:

variableTexto=`echo "Gracias"`
if [ $variableTexto == "Gracias" ]
then
    echo "De Nada!!!"
else
    echo "Eres una mala Persona!!!"
fi

Pero, si quisiéramos controlar el hilo de ejecución del script dependiendo de si la instrucción se ejecuta correctamente o si genera un error, lo podemos hacer gracias a que la ejecución de un comando de Linux siempre genera un EXIT STATUS o ESTADO DE SALIDA representado por un código llamado EXIT CODE o CÓDIGO DE SALIDA.

Para recoger o capturar el CÓDIGO DE ESTADO del último comando o instrucción ejecutada se puede lograr mediante un operador formado por el signo del dólar seguido de un interrogante ($?).

Por ejemplo, al ejecutar esta instrucción:

cd ./

Al finalizar su ejecución se habrá generado un EXIT STATUS (ESTADO DE SALIDA) que se representa mediante un EXIT CODE (CÓDIGO DE SALIDA). Pues bien, para recoger este EXIT CODE y mostrarlo por pantalla con un «echo», tan solo se debe ejecutar esta instrucción:

echo $?

Este valor, conocido como EXIT CODE, oscila entre 0 y 255, donde un valor igual a 0 indica que la ejecución del comando fue exitosa, mientras que cualquier valor superior a 0 señala la presencia de algún error. Pues bien, gracias a este EXIT CODE podemos diseñar estructuras de control dentro del script que controlen el hilo de ejecución según el código obtenido tras ejecutar una instrucción.

Operadores Lógicos AND y OR en la ejecución de Instrucciones.

En Bash también se le puede dar un toque de condicionalidad ejecutando dos instrucciones unidas por operadores lógicos AND y OR.

Cuando se utiliza el operador AND, representado por dos ampersands (&&), se puede crear una expresión condicional uniendo dos instrucciones para indicar que la segunda instrucción solo se ejecutará si la primera se ejecuta con éxito. Sin embargo, si la primera instrucción genera un error, la segunda no se ejecutará. Por ejemplo, si ejecutamos esta instrucción:

instruccion1 && instruccion2

Si instruccion1 se ejecuta sin problemas, instruccion2 intentará ejecutarse. Pero, si en la ejecución de instruccion1 se encuentra algún error, instruccion2 nunca se ejecutará.

Por otro lado, el operador OR, expresado con dos caracteres tubería o pipes (||), presenta una lógica inversa, es decir, cuando unimos dos instrucciones con este operador, la segunda solo se ejecutará si la primera falla. Si la primera instrucción se realiza con éxito, la segunda será ignorada. Sin embargo, si la primera instrucción encuentra un obstáculo, la segunda se activará para tomar el relevo.

Por ejemplo, si ejecutamos esta instrucción:

instruccion1 || instruccion2

En este caso, si instruccion1 se ejecuta con éxito, instruccion2 será ignorado. Sin embargo, si instruccion1 tiene algún error, intentará ejecutarse instruccion2.

Video Comandos en un Script para Bash

Si queréis, podeis ver una explicación mas detalla en este video: