GNU/Linux >> Tutoriales Linux >  >> Linux

Tutorial paso a paso de secuencias de comandos de Shell

En este tutorial, vamos a hablar sobre las secuencias de comandos de shell y cómo crear su primera secuencia de comandos de shell. En general, se denominan scripts de shell, pero los llamaremos scripts de Bash porque usaremos Bash entre los otros shells de Linux.

Hay zsh, tcsh, ksh y otros shells.

En las publicaciones anteriores, vimos cómo usar el shell Bash y cómo usar los comandos de Linux.

El concepto de un script de Bash es ejecutar una serie de comandos para realizar su trabajo.

Para ejecutar varios comandos en un solo paso desde el shell, puede escribirlos en una línea y separarlos con punto y coma.

pwd ; whoami

¡¡Este es un script de Bash!!

Primero se ejecuta el comando pwd, que muestra el directorio de trabajo actual, luego se ejecuta el comando whoami para mostrar los usuarios conectados actualmente.

Puede ejecutar varios comandos tanto como desee, pero con un límite. Puede determinar sus argumentos máximos usando este comando.

 getconf ARG_MAX

Bueno, ¿qué hay de poner los comandos en un archivo, y cuando necesitamos ejecutar estos comandos, ejecutamos solo ese archivo? Esto se llama secuencia de comandos Bash.

Primero, crea un nuevo archivo usando el comando táctil. Al comienzo de cualquier script Bash, debemos definir qué shell usaremos porque hay muchos shells en Linux, Bash shell es uno de ellos.

Shebang de secuencias de comandos de Shell

La primera línea que escribe al escribir un script de Bash es el (#!) seguido del shell que usará.

#! <===este signo se llama shebang.

#!/bin/bash

Si usa el signo de libra (#) delante de cualquier línea en su script de shell, esta línea se convertirá en un comentario, lo que significa que no se procesará, pero la línea anterior es un caso especial. Esta línea define qué shell usaremos, que es Bash shell en nuestro caso.

Los comandos de shell se ingresan uno por línea así:

#!/bin/bash

# This is a comment

pwd

whoami

Puede escribir varios comandos en la misma línea, pero debe separarlos con punto y coma, pero es preferible escribir comandos en líneas separadas; esto hará que sea más fácil de leer más adelante.

Establecer permiso de script

Después de escribir su script de shell, guarde el archivo.

Ahora, configure ese archivo para que sea ejecutable; de lo contrario, le dará permiso denegado. Puede revisar cómo establecer permisos usando el comando chmod.

chmod +x ./myscript

Luego intente ejecutarlo simplemente escribiéndolo en el shell:

./myscript

Y sí, se ejecuta.

Haz tu primer script Bash

Como sabemos por otras publicaciones, la impresión de texto no se realiza con

echo

comando.

Edite su archivo y escriba esto:

#!/bin/bash

# our comment is here

echo "The current directory is:"

pwd

echo "The user logged in is:"

whoami

Mira la salida:

¡Perfecto! Ahora podemos ejecutar comandos y mostrar texto:

echo

Si no conoce el comando echo o cómo editar un archivo, le recomiendo que consulte los artículos anteriores sobre los comandos básicos de Linux.

Uso de variables

Las variables le permiten almacenar información para usarla en su script.

Puede definir dos tipos de variables en su script de shell:

  • Variables de entorno
  • Variables de usuario

Variables de entorno

A veces necesitas interactuar con las variables del sistema; puede hacer esto usando variables de entorno.

#!/bin/bash

# display user home

echo "Home for the current user is: $HOME"

Observe que colocamos la variable de sistema $HOME entre comillas dobles e imprime la variable de inicio correctamente.

¿Qué pasa si queremos imprimir el signo de dólar en sí?

echo "I have $1 in my pocket"

Como la variable $1 no existe, no funcionará. Entonces, ¿cómo superar eso?

Puede usar el carácter de escape, que es la barra invertida \ antes del signo de dólar de esta manera:

echo "I have \$1 in my pocket"

¡¡Ahora funciona!!

Variables de usuario

Además, puede configurar y usar sus variables personalizadas en el script.

Puede llamar a las variables de usuario de la misma manera que esta:

#!/bin/bash

# User variables

grade=5

person="Adam"

echo "$person is a good boy, he is in grade $grade"

chmod +x myscript

./myscript

Sustitución de comandos

Puede extraer información del resultado de un comando utilizando la sustitución de comandos.

Puede realizar la sustitución de comandos con uno de los siguientes métodos:

  • El carácter de acento grave (`).
  • El formato $().

Asegúrese de que cuando escriba el carácter de acento grave, no sean las comillas simples.

Debe encerrar el comando con dos acentos graves como este:

mydir=`pwd`

O al revés:

mydir=$(pwd)

Así que el guión podría ser así:

#!/bin/bash

mydir=$(pwd)

echo $mydir

Puede almacenar la salida del comando en la variable mydir.

Cálculo matemático

Puede realizar cálculos matemáticos básicos utilizando el formato $(( 2 + 2 )):

#!/bin/bash

var1=$(( 5 + 5 ))

echo $var1

var2=$(( $var1 * 2 ))

echo $var2

Así de fácil.

sentencia si-entonces

Sus scripts de shell necesitarán declaraciones condicionales. Como si el valor es menor que 10, haz esto, haz lo otro. Puedes imaginar la lógica que quieras.

La estructura más básica de la declaración si-entonces es así:

si mando; entonces

haz algo

fi

y aquí hay un ejemplo:

#!/bin/bash

if whoami; then

	echo "It works"

fi

Desde el

whoami

devolverá mi usuario, por lo que la condición será verdadera e imprimirá el mensaje.

Profundicemos más y usemos otros comandos que conocemos.

Comprobar si existe un usuario

Tal vez buscando un usuario específico en el archivo del usuario

/etc/passwd

y si existe constancia me lo dices en un mensaje.

#!/bin/bash

user=likegeeks

if grep $user /etc/passwd; then

	echo "No such a user $user"

fi

Usamos el

/etc/passwd

expediente. Puede consultar nuestro tutorial sobre el comando grep.

Si el usuario existe, el script de shell imprimirá el mensaje.

¿Qué pasa si el usuario no existe? El script saldrá de la ejecución sin decirnos que el usuario no existe. Bien, mejoremos más el guión.

sentencia if-then-else

La declaración if-then-else toma la siguiente estructura:

si mando; entonces

haz algo

más

haz otra cosa

fi

Si el primer comando se ejecuta y devuelve cero, lo que significa éxito, no ejecutará los comandos después de la instrucción else; de lo contrario, si la instrucción if devuelve un valor distinto de cero; lo que significa que la condición de la declaración falla, en este caso, el shell ejecutará los comandos después de la declaración else.

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

else

	echo "The user $user doesn’t exist"

fi

Lo estamos haciendo bien hasta ahora, sigue moviéndote.

Ahora, ¿qué pasa si necesitamos más declaraciones else?

Bueno, eso es fácil, podemos lograrlo anidando sentencias if como esta:

si condición1; entonces

comandos

elif condición2; entonces

comandos

fi

Si el primer comando devuelve cero; significa éxito, ejecutará los comandos posteriores, de lo contrario, si el segundo comando devuelve cero, ejecutará los comandos posteriores, de lo contrario, si ninguno de estos devuelve cero, ejecutará solo los últimos comandos.

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

elif ls /home; then

	echo "The user doesn’t exist"

fi

Puede imaginar cualquier escenario, tal vez si el usuario no existe, cree un usuario usando

useradd

ordenar o hacer cualquier otra cosa.

Combinar pruebas

Puede combinar múltiples pruebas usando el comando AND (&&) u OR (||).

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] && [ -n $name ]; then

	echo "The name exists and the folder $dir exists."

else

	echo "One test failed"

fi

Este ejemplo devolverá verdadero solo si ambas pruebas tuvieron éxito; de lo contrario, fallará.

Además, puede usar OR (||) de la misma manera:

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] || [ -n $name ]; then

	echo "Success!"

else

	echo "Both tests failed"

fi

Este ejemplo devolvería el éxito si uno o ambos tuvieran éxito.

Solo fallaría si ambos fallaran.

Comparaciones numéricas

Puede realizar una comparación numérica entre dos valores numéricos mediante comprobaciones de comparación numérica como esta:

número1 -eq número2 Comprueba si el número1 es igual al número2.

número1 -ge número2 Comprueba si el número1 es mayor o igual que el número2.

número1 -gt número2 Comprueba si el número1 es mayor que el número2.

número1 -le número2 Comprueba si el número1 es menor o igual que el número2.

número1 -lt número2 Comprueba si el número1 es menor que el número2.

número1 -ne número2 Comprueba si número1 no es igual a número2.

Como ejemplo, probaremos uno de ellos, y el resto es igual.

Tenga en cuenta que la declaración de comparación está entre corchetes, como se muestra.

#!/bin/bash

num=11

if [ $num -gt 10]; then

	echo "$num is bigger than 10"

else

	echo "$num is less than 10"

fi

El número es mayor que diez, por lo que ejecutará la primera instrucción e imprimirá el primer eco.

Comparaciones de cadenas

Puede comparar cadenas con una de las siguientes formas:

cadena1 =cadena2 Comprueba si la cadena1 es idéntica a la cadena2.

cadena1 !=cadena2 Comprueba si la cadena1 no es idéntica a la cadena2.

string1

string1> string2 Comprueba si string1 es mayor que string2.

-n cadena1 Comprueba si la cadena1 es más larga que cero.

-z string1 Comprueba si string1 tiene longitud cero.

Podemos aplicar una comparación de cadenas a nuestro ejemplo:

#!/bin/bash

user="likegeeks"

if [ $user = $USER ]; then

	echo "The user $user&nbsp; is the current logged in user"

fi

Una nota engañosa sobre mayor que y menor que para las comparaciones de cadenas, DEBEN ser escapado con la barra invertida porque si usa solo el símbolo mayor que, muestra resultados incorrectos.

Así que deberías hacerlo así:

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

Se ejecuta, pero da esta advertencia:

./myscript: line 5: [: too many arguments

Para arreglarlo, envuelva $vals con una comilla doble, obligándolo a permanecer como una cadena como esta:

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

Una nota crítica sobre mayor que y menor que para comparaciones de cadenas. Consulte el siguiente ejemplo para comprender la diferencia:

#!/bin/bash

v1=Likegeeks

v2=likegeeks

if [ $v1 \> $v2 ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

sort myfile

como geeks

Me gusta geeks

La condición de prueba considera las letras minúsculas más grandes que las mayúsculas.

sort

A diferencia del comando ordenar, que hace lo contrario.

La condición de prueba se basa en el orden ASCII.

sort

Mientras que el comando de clasificación se basa en los órdenes de numeración de la configuración del sistema.

Comparaciones de archivos

Puede comparar y buscar archivos usando los siguientes operadores:

-d my_file Comprueba si es una carpeta.

-e mi_archivo Comprueba si el archivo está disponible.

-f my_file Comprueba si es un archivo.

-r my_file Comprueba si es legible.

mi_archivo nt my_file2 Comprueba si my_file es más reciente que mi_archivo2.

mi_archivo ot my_file2 Comprueba si my_file es antiguo que mi_archivo2.

-O my_file Comprueba si el propietario del archivo y el usuario registrado coinciden.

-G my_file Comprueba si el archivo y el usuario registrado tienen un grupo idéntico.

Como dan a entender, nunca los olvidarás.

Escojamos uno de ellos y tomémoslo como ejemplo:

#!/bin/bash

mydir=/home/likegeeks

if [ -d $mydir ]; then

	echo "Directory $mydir exists"

	cd $mydir

	ls

else

	echo "NO such file or directory $mydir"

fi

No vamos a escribir cada uno de ellos como ejemplo. Simplemente escriba la comparación entre los corchetes tal como está y complete su secuencia de comandos normalmente.

Hay algunas otras funciones avanzadas si-entonces, pero hagámoslo en otra publicación.

Eso es por ahora. Espero que lo disfrutes y sigas practicando cada vez más.

Gracias.


Linux
  1. ¿Descriptores de archivos y secuencias de comandos de Shell?

  2. ¿Mostrar contenido de mayor valor en Shell Scripting?

  3. Cómo comparar cadenas en Bash Shell Scripting

  4. Buscar y reemplazar en secuencias de comandos de shell

  5. ¿Qué es el uso () en las secuencias de comandos de shell?

Tutorial de secuencias de comandos de Bash para principiantes

¿Qué es Shebang en Linux Shell Scripting?

Shell Scripting Parte 4:entrada, salida y redirección

Gestión eficaz de las zonas horarias de Linux (tutorial paso a paso)

Tutorial de introducción a Bash Scripting con 5 ejemplos prácticos

Tutorial de funciones de Bash Shell con 6 ejemplos prácticos