Si tienes que hacerlo más de una vez, ¡automatízalo!
A menudo te encontrarás repitiendo una sola tarea en Linux una y otra vez. Puede ser una simple copia de seguridad de un directorio o podría estar limpiando archivos temporales o incluso puede ser la clonación de una base de datos.
Automatizar una tarea es uno de los muchos escenarios útiles en los que puede aprovechar el poder de las secuencias de comandos bash.
Permítame mostrarle cómo crear un script de shell bash simple, cómo ejecutar un script bash y qué cosas debe saber sobre scripts de shell.
Crea y ejecuta tu primer script de shell
Primero creemos un nuevo directorio llamado scripts que alojará todos nuestros scripts bash.
mkdir scripts
cd scripts
Ahora dentro de este 'directorio de scripts', cree un nuevo archivo llamado hello.sh usando el comando cat:
cat > hello.sh
Inserte la siguiente línea escribiéndola en la terminal:
echo 'Hello, World!'
Presione Ctrl+D para guardar el texto en el archivo y salir del comando cat.
También puede usar un editor de texto basado en terminal como Vim, Emacs o Nano. Si está usando una computadora de escritorio Linux, también puede usar un editor de texto gráfico como Gedit para agregar el texto a este archivo.
Entonces, básicamente estás usando el comando echo para imprimir "Hello World". Puede usar este comando en la terminal directamente, pero en esta prueba, ejecutará este comando a través de un script de shell.
Ahora haga que el archivo hello.sh sea ejecutable usando el comando chmod de la siguiente manera:
chmod u+x hello.sh
Y, por último, ejecute su primer script de shell precediendo a hello.sh con el "bash" de shell deseado:
bash hello.sh
Verás Hello, World!
impreso en la pantalla. Ese fue probablemente el programa Hello World más fácil que hayas escrito, ¿verdad?
Aquí hay una captura de pantalla de todos los pasos que viste arriba:
Convierta su shell script en bash script
¿Confundido? No se confunda todavía. Te explicaré las cosas.
Bash, que es la abreviatura de "Bourne-Again shell", es solo un tipo de muchos shells disponibles en Linux.
Un shell es un intérprete de línea de comandos que acepta y ejecuta comandos. Si alguna vez ha ejecutado algún comando de Linux, entonces ha utilizado el shell. Cuando abre una terminal en Linux, ya está ejecutando el shell predeterminado de su sistema.
Bash suele ser el shell predeterminado en la mayoría de las distribuciones de Linux. Esta es la razón por la que bash suele ser sinónimo de shell.
Los scripts de shell a menudo tienen casi la misma sintaxis, pero a veces también difieren. Por ejemplo, el índice de matriz comienza en 1 en Zsh en lugar de 0 en bash. Un script escrito para Zsh shell no funcionará igual en bash si tiene arreglos.
Para evitar sorpresas desagradables, debe decirle al intérprete que su script de shell está escrito para bash shell. ¿Cómo haces eso? ¡Usas shebang!
La línea SheBang al principio del script de shell
La línea "#!/bin/bash" se conoce como la línea shebang y en alguna literatura, se la conoce como la línea hashbang y eso se debe a que comienza con los dos caracteres hash '#' y bang '!'.
#! /bin/bash
echo 'Hello, World!'
Cuando incluye la línea "#!/bin/bash" en la parte superior de su secuencia de comandos, el sistema sabe que desea usar bash como intérprete para su secuencia de comandos. Por lo tanto, puede ejecutar el script hello.sh directamente ahora sin precederlo con bash.
Agregando su script de shell a la RUTA (para que se puede ejecutar desde cualquier directorio)
Es posible que haya notado que usé ./hello.sh para ejecutar el script; obtendrá un error si omite el ./
inicial[email protected]:~/scripts$ hello.sh
hello.sh: command not found
Bash pensó que estaba intentando ejecutar un comando llamado hello.sh. Cuando ejecuta cualquier comando en su terminal; ellos buscan ese comando en un conjunto de directorios que se almacenan en la variable PATH.
Puede usar echo para ver el contenido de esa variable PATH:
echo $PATH
/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
El carácter de dos puntos (:) separa la ruta de cada uno de los directorios que su shell escanea cada vez que ejecuta un comando.
Los comandos de Linux como echo, cat, etc. se pueden ejecutar desde cualquier lugar porque sus archivos ejecutables se almacenan en los directorios bin. Los directorios bin se incluyen en la RUTA. Cuando ejecuta un comando, su sistema verifica la RUTA para todos los lugares posibles que debe buscar para encontrar el ejecutable para ese comando.
Si desea ejecutar su secuencia de comandos bash desde cualquier lugar, como si fuera un comando normal de Linux, agregue la ubicación de su secuencia de comandos de shell a la variable PATH.
Primero, obtenga la ubicación del directorio de su secuencia de comandos (suponiendo que se encuentre en el mismo directorio), use el comando PWD:
pwd
Use el comando de exportación para agregar su directorio de scripts a la variable PATH.
export PATH=$PATH:/home/user/scripts
Observe que he agregado el 'directorio de scripts' al final de nuestra variable PATH. Para que la ruta personalizada se busque después de los directorios estándar.
El momento de la verdad está aquí; ejecutar hola.sh:
[email protected]:~/scripts$ hello.sh
Hello, World!
¡Funciona! Esto nos lleva al final de este tutorial. Espero que ahora tenga una idea básica sobre las secuencias de comandos de shell. Puede descargar el PDF a continuación y practicar lo que aprendió con algunos ejemplos de desafíos de secuencias de comandos. También se proporcionan sus soluciones en caso de que necesite sugerencias.
Bash Chapter 1 Practice QuestionsProblems y su solución para practicar lo que acabas de aprender en este capítuloBash-Chapter-1-Practice-Questions-Linux-Handbook.pdf26 KB
Ya que le presenté la variable PATH, permanezca atento al próximo tutorial de secuencias de comandos de bash, en el que analizo las variables de shell en detalle.