Si está comenzando con los sistemas Linux, términos como “Shell scripting” o “Bash scripting ” puede ser bastante común, pero ¿qué significan? Antes de entrar en detalles, el aprendizaje de las secuencias de comandos de Bash puede ayudarlo a ahorrar tiempo en la ejecución y realización de diversas tareas del sistema y comprender mejor la línea de comandos de Linux (Terminal) y automatizar múltiples tareas del sistema.
¿Qué es Bash?
Bash, acrónimo de “Bourne-Again-Shell” es un shell de Unix o intérprete de lenguaje de comandos para el sistema operativo GNU. Ha sido el Shell principal para las distribuciones de Linux y los lanzamientos de Apple macOS antes de macOS Catalina. Bash también está disponible para Windows 10 a través del subsistema de Windows para Linux.
Bash generalmente se ejecuta en una ventana de texto comúnmente conocida como Terminal, donde los usuarios escriben comandos para realizar varias tareas. Bash también puede ejecutar comandos escritos en un archivo, un método denominado “bash scripting”.
Diferencia entre Bash scripting y Shell Scripting
Las secuencias de comandos de Shell y las secuencias de comandos de Bash no son lo mismo. Con las secuencias de comandos Bash, está utilizando explícitamente el shell bash. Por otro lado, la secuencia de comandos de Shell puede ser una palabra bastante amplia, ya que tenemos otros shells disponibles además de Bash. Algunos de los más comunes incluyen Korn (ksh), C shell (csh), Z shell (zsh) y Bash shell (sh). Sin embargo, no sería una sorpresa encontrar personas que usan secuencias de comandos de bash y secuencias de comandos de shell indistintamente para significar lo mismo. Nuestra publicación sobre los 6 principales shells de código abierto para Linux ofrece una descripción detallada de estos shells.
En esta publicación, veremos las secuencias de comandos de Bash. De forma predeterminada, muchas distribuciones de Linux disponibles utilizan el shell Bash. Consulte nuestra publicación sobre las 6 mejores distribuciones de Linux para principiantes. Para confirmar el shell que está utilizando en su distribución actual de Linux, ejecute el comando en la Terminal.
echo $SHELL
En la imagen de arriba, puede ver que el intérprete predeterminado en mi sistema es bash. Actualmente, estoy ejecutando Ubuntu 20.04 LTS. ¡Vamos a sumergirnos!
Comprensión de las secuencias de comandos de Bash
Los scripts bash son archivos de texto que contienen comandos bash que se ejecutan para realizar varias tareas. Para escribir estos scripts, solo necesita un editor de texto simple como gedit, leaf pad, vim, nano y mucho más. Recuerde guardar sus scripts con un .sh
extensión y como texto sin formato y no como texto enriquecido. Uno de mis editores favoritos que uso para escribir guiones es el editor nano.
Nombrar, Asignar permisos y Ejecutar un script Bash
Como se explicó anteriormente, asegúrese de usar la extensión .sh para sus scripts bash. Por ejemplo, puede tener un script con el nombre fosslinux_backup.sh
. Sin embargo, sería mejor si tuviera cuidado al nombrar sus scripts. Por ejemplo, a la mayoría de las personas les gusta guardar la mayoría de sus guiones como "prueba". Desconocido para la mayoría, hay un comando incorporado de Unix llamado prueba, que verifica los tipos de archivos y compara los valores. Puede usar el comando which para verificar si hay un programa con el mismo nombre que el de su secuencia de comandos para evitar conflictos de programas.
which [command] e.g which test
Del resultado anterior, podemos ver que la prueba ya es un comando incorporado. Por lo tanto, para evitar conflictos entre programas, no nombraré ninguno de mis scripts como “prueba”.
Para hacer que el script sea ejecutable para todos los usuarios, use el siguiente comando:
chmod +x [script.sh]
Para hacer que el script sea ejecutable para el usuario actual, use el siguiente comando:
chmod u+x [script.sh]
Ahora, para ejecutar el script, ejecute el siguiente comando:
./[script_name]
Con el método anterior, te darás cuenta de que necesitarás usar el cd
comando para moverse al directorio que contiene el script o pasar la ruta al script. Sin embargo, hay una solución para esto. Guarde sus scripts en el bin
directorio presente en el directorio de inicio.
Con actualizaciones recientes, la mayoría de las distribuciones no vienen con el bin
carpeta por defecto. Por lo tanto, se le pedirá que lo cree manualmente. Al colocar sus scripts en esta carpeta, puede ejecutar el script escribiendo su nombre en la Terminal sin usar el cd
y ./
comandos.
Directrices de secuencias de comandos de Bash
Antes de escribir su primer guión, hay algunas pautas que debe comprender al escribir guiones.
- Todos sus scripts deben comenzar con la línea "#!/bin/bash".
- Pon cada comando en una nueva línea.
- Todos los comentarios comienzan con un
#
símbolo. - Los comandos se incluyen con
()
corchetes.
El #!/bin/bash
(Hash-Bang Hack) es la ruta al shell que usaremos. Si está utilizando otro shell, deberá editar esta ruta. Entendemos que todos los comentarios comienzan con el #
símbolo. Sin embargo, cuando va seguido de un (!)
marca en Hash-Bang Hack, el script se ve obligado a ejecutarse con el shell al que apunta esta línea. En nuestro caso, es el shell Bash.
Tu primera secuencia de comandos Bash
Como la mayoría de los lenguajes de programación, escribiremos un script que imprima el “Hello World” declaración cuando se ejecuta. Abra su editor de texto favorito y pegue los comandos a continuación. Guarde el archivo de texto como fossHelloWorld.sh
o cualquier otro nombre que no sea un comando incorporado.
#!/bin/bash #This script will print 'Hello World' on the Terminal echo "Hello World"
Una vez que haya guardado el archivo, hágalo ejecutable ejecutando el siguiente comando:
chmod +x fossHelloWorld.sh
Ahora, ejecútelo con el siguiente comando:
./fossHelloWorld.sh
El guión anterior tiene solo tres líneas. El primero es Hash-Bang Hack, que hemos discutido anteriormente, el segundo es un comentario y el tercero es el comando que se ejecutará. Tenga en cuenta que los comentarios nunca se ejecutan.
Veamos otras funciones de secuencias de comandos bash que puede utilizar.
Comando de eco
El comando Echo se usa para imprimir resultados en la línea de comandos o Terminal de Linux. Si es un desarrollador y ha trabajado con PHP antes, también debe haber encontrado este comando. Escribamos un pequeño script bash para demostrar cómo funciona este comando.
#!/bin/bash #Let's print the first line echo "This is Fosslinux.com - With a new line" #Let's print the Second statement without a new line echo -n "This is Fosslinux - No new Line"
Guarde su secuencia de comandos, asígnele los permisos necesarios y ejecútela.
Para comprender el código, el primer comando de eco imprime una declaración y pasa a la siguiente línea. El segundo comando echo tiene el -n
argumento que impide que el script pase a la siguiente línea. Puede usar muchas otras opciones con el comando Echo, incluidas las variables, como veremos a continuación.
Variables
Las variables son una parte común y necesaria de cualquier lenguaje de programación. Uno puede declarar variables Bash de varias maneras. Al asignar un valor a cualquier variable, no necesita usar ningún símbolo. Sin embargo, al llamar al valor de la variable, deberá usar el $
firmar al principio de la variable.
Puede usar variables en la Terminal o como scripts. Ejecute los siguientes comandos en su Terminal.
myWebsite = "Fosslinux.com" echo $myWebsite
Ahora vamos a crear un script bash que tome dos entradas del usuario y las almacene en variables $x
y $y
. La secuencia de comandos comprobará si los dos valores son iguales o no.
#!/bin/bash echo "Enter the first number" read a echo "Enter the second number" read b if [[ $a -eq $b ]] then echo "Numbers are equal" else echo "Numbers are not equal" fi
Guarde el script y ejecútelo. En la imagen a continuación, puede ver que ingresamos valores diferentes y el script pudo verificar si son iguales o no.
Ahora, echemos un vistazo más de cerca al código. Las dos primeras declaraciones de eco solicitan al usuario que ingrese el primer y segundo número. El read
El comando esperará a que el usuario ingrese un número y lo almacene en la variable especificada. En nuestro caso, eso es a
y b
. Entonces tenemos una sentencia if que comprueba si los dos valores son iguales o no.
Declaración condicional
En cualquier lenguaje de programación, las sentencias condicionales controlan el flujo de un programa. Un fragmento de código se ejecutará solo cuando se cumpla una condición particular. Algunas de las declaraciones condicionales más comunes incluyen "if-then-else" y "case". A continuación se muestra la sintaxis básica de la instrucción if-then-else.
if [[ condition ]] then <execute an instruction> else <execute another instruction/command> fi
Eche un vistazo a la siguiente secuencia de comandos, que utiliza la declaración condicional "if-then-else".
#!/bin/bash echo "Enter Your Age" read age if ((age > 18 )) then echo "You can go to the party" else echo "You are not eligible to go to the party" fi
Repasemos el guión de arriba. Tenemos el echo
declaración que solicita a los usuarios que ingresen su número de edad. El read
La declaración almacena la edad ingresada en una variable "edad". Luego tenemos una declaración condicional if-then-else que verifica si la edad es mayor de 18 años antes de instruir al usuario.
Bucles
Los bucles se usan comúnmente cuando desea ejecutar una pieza de código varias veces. Por ejemplo, si quisiera hacer eco de 1000 líneas de la declaración "Bienvenido a Fosslinux", necesitaría 1000 declaraciones de eco. Sin embargo, con los bucles, todo lo que necesito hacer es especificar la cantidad de veces que quiero que la declaración se repita o se imprima en la Terminal. Bash admite tres tipos de bucles; Bucle For, Bucle Mientras y Bucle Hasta. Veamos cada uno de ellos.
-
El bucle For
Un For Loop se usa para iterar a través de una lista de datos específicos o una matriz. A continuación se muestra la sintaxis básica de Bash For Loop;
for Value in 1 2 3 4 5 .. N do instruction1 instruction2 instruction-N done
o,
for VALUE in file1 file2 file3 do instruction1 on $VALUE instruction2 instruction-N done
Eche un vistazo al guión a continuación. Itera a través de los días dados de la semana y los imprime en la Terminal línea por línea.
#Read a weekday name in each iteration of the loop for day in Monday Tuesday Wednesday Thursday Friday Saturday Sunday do echo "$day" done
Guardemos el script como ForLoop.sh
y ejecutarlo. A continuación se muestra una captura de pantalla de la salida.
Eso es solo un ejemplo simple de lo que puede hacer con For Loop. También puede combinarlo con declaraciones condicionales para completar una tarea en particular.
-
El ciclo while
El ciclo while ejecuta una tarea específica mientras una condición en particular sigue siendo verdadera. En cada iteración, el bucle primero verificará la condición antes de ejecutar las instrucciones. Cuando la condición es Falsa, el ciclo terminará. La sintaxis básica del ciclo while de bash es la siguiente:
while [CONDITION] do [COMMANDS] done
Por ejemplo, podemos tener un script que imprima la declaración “Bienvenido a FOSSLINUX.COM” 20 veces hasta que una variable X se establezca en 20. Intentemos implementar eso de manera práctica. Eche un vistazo a la secuencia de comandos a continuación.
#!/bin/bash x=1 while [ $x -le 20 ] do echo "Welcome to FOSSLINUX.COM" x=$(( $x + 1 )) done
Guardemos el script como WhileLoop.sh
y ejecutarlo. A continuación se muestra una captura de pantalla de la salida.
Echemos un vistazo a la secuencia de comandos While Loop anterior. Primero declaramos una variable X dándole el valor 1. Luego creamos una instrucción While que genera la declaración "Bienvenido a FOSSLINUX.COM" mientras X es menor que 20. Por último, incrementamos X en uno después de cada iteración.
-
El bucle Hasta
Los bucles Bash Until se utilizan para ejecutar un conjunto de instrucciones o comandos siempre que la condición establecida se evalúe como falsa. A continuación se muestra la sintaxis básica del bucle Until.
until [CONDITION] do [INSTARUCTIONS/COMMANDS] done
Similar al ciclo While, el ciclo Until primero evalúa la condición establecida antes de ejecutar las instrucciones o comandos. Si la condición se evalúa como falsa, se ejecutan las instrucciones. El bucle finaliza cuando la condición se evalúa como verdadera. Eche un vistazo al siguiente ejemplo.
#!/bin/bash count=0 until [ $count -gt 5 ] do echo Counter: $count ((count++)) done
Después de guardar y ejecutar el script anterior, obtenemos el siguiente resultado:
Los scripts anteriores primero crean un recuento variable y lo establecen en cero (0). Esa es la condición que controla el flujo de nuestro programa. El Bucle Hasta comprueba si el valor de la cuenta es mayor que 5. Si no lo es, imprimirá las instrucciones pasadas. Sin embargo, si el valor es mayor que 5, el ciclo terminará inmediatamente. Por último, incrementamos el valor de conteo en 1 (contar++).
Funciones bash
En programación y secuencias de comandos, las funciones se utilizan para contener una pieza de código reutilizable necesaria para realizar una tarea en particular. Por lo tanto, si tiene comandos similares que desea ejecutar en diferentes partes de su secuencia de comandos, no necesita escribir estos comandos repetidamente. Incluyalos en una función y ejecute la función en su lugar.
A continuación se muestra la sintaxis básica de la función Bash.
function_name () { <instructions/commands> }
o,
function function_name { <instructions/commands> }
Vamos a crear un script simple que haga uso de funciones. Primero creamos una función llamada "myFunction", que genera la declaración "Hola, soy la primera función" cuando se llama. La segunda función, "myCities", es un poco avanzada ya que acepta argumentos pasados. Los argumentos se dan después de llamar al nombre de la función. Son accesibles en la función como $1.
#!/bin/bash myFunction () { echo "Hello I am the first function" echo "Hello I am the first function" echo } echo "This is the second function" function myCities () { echo Hello $1 } myFunction myCities Washington,D.C myCities Phoenix
Después de guardar y ejecutar el script, obtenemos el siguiente resultado.
Menús de fiesta
Al escribir un script para realizar una tarea avanzada, es posible que necesite que el usuario seleccione una sola opción de varias opciones que se muestran en la Terminal. Para lograr eso, usaremos bash select
comando.
Crea un script de menú simple que pedirá a los usuarios que seleccionen sus distribuciones de Linux favoritas de una lista. Eche un vistazo a la secuencia de comandos a continuación.
#!/bin/bash #Print message for the user echo "Select your favorite Linux Distribution" select distro in Ubuntu Fedora OpenSUSE DeepIN Parrot ArchLinux Kali do #Print the selected value if [[ $distro == "Exit" ]] then exit 0 else echo "Selected Linux distribution is $distro" fi done
Guardemos el script como menu.sh y ejecútelo. Obtenemos el resultado a continuación.
En el script anterior, tenemos una lista de siete distribuciones de Linux, el usuario seleccionará una. Después de hacer una selección, se almacena en la variable distro
y luego se imprime concatenándolo con la cadena “La distribución de Linux seleccionada es.” Los menús de selección de Bash pueden ser bastante útiles, especialmente cuando tiene varios scripts que realizan diferentes tareas y uno tiene que seleccionar el que desea ejecutar.
Aritmética
Todos los lenguajes de programación admiten la realización de operaciones aritméticas, y bash scripting no es una excepción. Sin embargo, la forma en que llevamos a cabo las operaciones aritméticas es un poco diferente. A continuación se muestra una de las formas en que puede realizar operaciones aritméticas en bash. Veremos cuatro tipos de operaciones aritméticas:suma, división y multiplicación.
#!/bin/bash # Calculate the sum result=$((70+15)) # Print sum value echo "sum = $result" # Calculate the division result=$((100/25)) # Print division value echo "division = $result" #Calculate Multiplication result=$((15*15)) echo "Multiplication = $result"
Guardemos el script anterior como aritmetic.sh y ejecútelo. Obtenemos el resultado a continuación.
Conclusión
Esta es una guía completa para principiantes para comenzar con la creación de scripts de Bash. Sin embargo, hay más en Bash además de lo que se cubre en este tutorial. Uno de los lugares que recomendaría para mejorar sus habilidades es el Manual de referencia de Bash de GNU. Si tiene algún problema o comenta esta publicación, no dude en hacer clic en los comentarios a continuación.