Cómo crear un script de Shell en Linux
Shell es una interfaz del sistema operativo. Acepta comandos de los usuarios y los interpreta para el sistema operativo. Si desea ejecutar varios comandos juntos, puede hacerlo creando un script de shell. Los scripts de Shell son muy útiles si necesita realizar una tarea de forma rutinaria, como realizar una copia de seguridad. Puede enumerar esos comandos y ejecutarlos todos con un solo script. Veamos cómo se puede crear un script de shell y ejecutarlo en Linux.
Crear un script de shell
Inicie sesión en su máquina Linux y abra la terminal, navegue hasta la carpeta donde desea almacenar el script de Shell. Los scripts de Shell terminan con la extensión .sh. Creemos nuestro primer script de shell. Escribir
touch script.sh
Ahora, este archivo de script no es ejecutable de forma predeterminada, tenemos que otorgarle permiso ejecutable a este archivo. Escribir
chmod +x script.sh
Ahora agregaremos algunos comandos a este script de shell. Abra este script de shell con cualquier editor de texto de su elección (basado en línea de comandos o GUI) y agregue algunos comandos. Usaremos nano. Escribir
nano script.sh
Agregue los siguientes comandos para probar este script de shell
echo This is my first shell script touch testfile ls echo End of my shell script
Guarde los cambios y ejecute el script de shell escribiendo
./script.sh
Captura de pantalla de los pasos anteriores
Puede ver que ejecutó todos los comandos especificados.
Comentarios en el script de shell
Cualquier línea que comience con # en el script de shell se trata como un comentario y el shell la ignora durante la ejecución, excepto la línea shebang, que veremos más adelante en este artículo. Veamos un ejemplo. Se crea un script de shell con el siguiente contenido.
# This is a comment echo Testing comments in shell script
Comentarios en Shell Script
Puedes ver que el comentario se ignora.
Variables en el script de Shell
Sí, los scripts de Shell admiten el uso de variables y no necesitamos definir el tipo de variable durante su declaración. Hay dos tipos de variables:
- Variables definidas por el sistema
- Variables definidas por el usuario.
Las variables definidas por el sistema, también llamadas variables de entorno, generalmente están en mayúsculas. Puede ver todas las variables de entorno actuales utilizando el comando printenv. Las variables definidas por el usuario las establece el usuario y existen solo durante la ejecución del script. Puede definir una variable simplemente escribiendo su nombre y asignando un valor con el signo = y acceder a una variable agregando $ antes del nombre de la variable. Las variables se demuestran en el siguiente script de ejemplo.
# Accessing an Environment Variable echo $USER # Creating and accessing User defined Variable variable_name='Geeksforgeeks' echo $variable_name
Variables en el script de Shell
Definición del intérprete de Shell Script
Hay muchos Shells disponibles en Linux, como The bourne shell(sh), The Korn Shell(ksh) y GNU Bourne-Again Shell(bash). Los scripts escritos para el shell sh se denominan scripts de shell y pueden ser interpretados tanto por el shell ksh como por el bash. ksh y Bash son versiones mejoradas del sh shell original y tienen más funciones que sh. Bash es generalmente el shell predeterminado en la mayoría de las distribuciones de Linux y los scripts escritos específicamente para bash shell se denominan scripts bash.
Puede especificar qué shell utilizará el script, incluso si el script se ejecuta desde otra terminal de shell. Para hacer esto, agregue #! encima del archivo de script, seguido de la ruta absoluta del shell elegido. Para especificar bash como intérprete, agregue la siguiente línea encima del script de shell.
#!/bin/bash
Esta línea se llama línea shebang.
Nota: Esto sólo funcionará si bash está instalado en su sistema.
Operadores de comparación
Puede comparar dos variables en scripts de shell. Hacemos estas comparaciones para tomar decisiones, veremos cómo hacerlo más adelante en este artículo, pero antes de eso, aquí hay una lista de algunos operadores de comparación.
Comparación de enteros
| Operador | Descripción |
|---|---|
| -eq | es igual a |
| - es | no es igual a |
| -gt | es mayor que |
| -ge | es mayor o igual a |
| -lt | es menos que |
| -el | es menor o igual a |
Comparación de cadenas
| Operador | Descripción |
|---|---|
| == | es igual a |
| != | no es igual a |
| < | es menor que, en orden alfabético ASCII |
| > | es mayor que, en orden alfabético ASCII |
Agregamos un antes porque es necesario escaparlos cuando se escriben en la construcción []. Ahora, veamos dónde se usan.
Declaraciones condicionales
Las declaraciones condicionales se utilizan para ejecutar un bloque de código solo cuando se cumplen ciertas condiciones. Los scripts de Shell admiten el uso de declaraciones condicionales. Utilizamos operadores de comparación para comprobar las condiciones. Veamos algunas declaraciones condicionales.
si declaración
Comprueba la condición y, si es verdadera, ejecuta los comandos.
Sintaxis
if [ condition ] then #statements fi
Veamos un ejemplo.
#!/bin/sh x=10 y=11 if [ $x -ne $y ] then echo 'Not equal' fi
.si declaración
Declaración si no
En una declaración if-else, puede especificar un conjunto de comandos para ejecutar si no se cumple la condición.
Sintaxis
if [ condition ] then #set of statements if the condition is true else #set of statements if the condition is false fi
Veamos un ejemplo
#!/Syntaxbin/sh x=10 y=10 if [ $x -ne $y ] then echo 'Not equal' else echo 'They are equal' fi
.declaración si no
Hay otras declaraciones condicionales, puedes leer sobre ellas. aquí .
Nota: Escriba un espacio después de [y antes] mientras especifica la condición a verificar; de lo contrario, obtendrá un error.
Bucles
Usando bucles, puede ejecutar un conjunto de comandos una y otra vez, hasta que se cumpla una determinada condición. Veamos algunos de los bucles.
Mientras bucle
Comienza a ejecutar los comandos especificados si la condición es verdadera y los repite hasta que la condición es falsa.
Sintaxis
while [ condition ] do #set of statements done
Veamos un ejemplo.
#!/bin/sh x=2 while [ $x -lt 6 ] do echo $x x=`expr $x + 1` done
Mientras bucle
Incluimos una declaración expr dentro de ` ` cuando la asignamos a una variable. Puede leer sobre el comando expr aquí.
En bucle
En un bucle for, la variable itera sobre una lista de valores y finaliza cuando no hay más valores sobre los que iterar.
Sintaxis
for var in val1 val2 val3 do #statements done
Veamos un ejemplo.
#!/bin/sh for var in 2 4 5 8 do echo $var done
en bucle
Puedes leer sobre bucles en detalle. aquí .
Argumentos posicionales
Los argumentos posicionales son los argumentos o valores que pasamos al script de shell mientras ejecutamos el script. Se accede a ellos mediante las variables $0, $1, $2… $9. Más allá de eso, se hace referencia a ellos mediante ${10}, ${11}, etc. $# almacena el número de argumentos pasados y $0 almacena el nombre del script. Veamos un ejemplo para entender todo esto.
#!/bin/sh echo 'No of arguments is $#' echo 'Name of the script is $0' echo 'First argument is $1' echo 'Second argument is $2'
Para pasar los argumentos, simplemente escríbalos en la terminal después del nombre del script como se muestra a continuación.
Argumentos posicionales
Almacenamiento de la salida de los comandos
Puede almacenar la salida de los comandos dentro de una variable en un script de shell. Hay dos formas de hacerlo.
Sintaxis
#Syntax 1 var=$(a valid linux command) #Syntax 2 var2=`a valid linux command`
Veamos un ejemplo.
#!/bin/sh b=$(pwd) c=`pwd` echo $b echo $c d=$(ls /bin | grep bash) echo $d
Almacenamiento de la salida de los comandos
Códigos de salida de comandos de shell
Siempre que un comando finaliza y devuelve el control al proceso principal, devuelve códigos de salida entre 0 y 255. El código de salida 0 significa que el comando fue exitoso y cualquier otro código de salida significa que el comando no tuvo éxito. Puede ver el código de salida después de ejecutar cualquier comando accediendo al $? variable. Vea el ejemplo a continuación.
código de salida del comando shell
Puede configurar manualmente un código de salida para su script de shell. Esto se puede utilizar con declaraciones condicionales para transmitir si se logró o no el propósito del guión.
Ejemplo
#!/bin/sh read x if [ $x -ne 10 ] then echo failed exit 1 else echo passed exit 0 fi
código de salida del comando shell