Cómo crear un script de Shell en Linux

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