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 puede crear un script de shell y ejecutarlo en Linux.
Creación de un script de shell
Inicie sesión en su máquina Linux y abra el terminal, navegue hasta la carpeta donde desea almacenar el script de shell. Los scripts de shell terminan con la extensión «.sh». Vamos a crear nuestro primer script de shell. Escribir
touch script.sh
Ahora, este archivo de secuencia de comandos no es ejecutable de forma predeterminada, tenemos que dar el 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 basado en 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
Puede ver, 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
Puedes ver, el comentario es ignorado.
Variables en Shell Script
Sí, los scripts de Shell admiten el uso de variables y no necesitamos definir el tipo de una 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 mediante el comando printenv. Las variables definidas por el usuario las establece el usuario y solo existen 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 muestran en el siguiente script de ejemplo.
# Accessing an Environment Variable echo $USER # Creating and accessing User defined Variable variable_name="Geeksforgeeks" echo $variable_name
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 por los shells ksh y bash. ksh y Bash son versiones mejoradas del shell sh 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 usará el script, incluso si el script se ejecuta desde otro terminal de shell. Para hacer esto, agregue «#!» en la parte superior del archivo de script, seguido de la ruta absoluta del shell elegido. Para especificar bash como intérprete, agregue la siguiente línea en la parte superior del script de shell.
#!/bin/bash
Esta línea se llama la línea shebang.
Nota: Esto solo 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 |
-nordeste | no es igual a |
-gt | es mayor que |
-ge | es mayor o igual a |
-lt | es menos que |
-le | es menor o igual que |
Comparación de strings
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 \ antes de < y > porque deben escaparse 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 sentencias condicionales. Usamos operadores de comparación para verificar 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
Declaración if-else
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
Hay otras sentencias condicionales, puedes leer sobre ellas aquí .
Nota: escriba un espacio después de [y antes] mientras especifica la condición que se 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
Encerramos una instrucción expr dentro de ` ` cuando la asignamos a una variable. Puede leer sobre el comando expr aquí .
En bucle
En un ciclo for, la variable itera sobre una lista de valores y finaliza cuando no hay más valores para 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
Puede leer acerca de los bucles en detalle aquí .
Argumentos posicionales
Los argumentos posicionales son los argumentos o valores que pasamos al script de shell mientras se ejecuta el script. Se accede a ellos por las variables $0, $1, $2… $9. Más allá de eso, se les hace referencia mediante ${10}, ${11} y así sucesivamente. $# 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.
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
Códigos de salida de los comandos de shell
Cada vez 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.
Puede configurar manualmente un código de salida para su script de shell. Esto se puede usar con declaraciones condicionales para transmitir si se logró o no el propósito del script.
Ejemplo
#!/bin/sh read x if [ $x -ne 10 ] then echo failed exit 1 else echo passed exit 0 fi
Publicación traducida automáticamente
Artículo escrito por jivendrasah y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA