Linux en Español

Script de Bash paso a paso tutorial (con ejemplos)

En este tutorial, vamos a hablar sobre scripts de Bash o scripts de shell y cómo crear tu primer script de Bash. En realidad, se les llama scripts de shell en general, pero vamos a llamarlos scripts de Bash porque vamos a utilizar Bash entre los otros shells de Linux.

Existen los shell zsh, tcsh, ksh y otros shell.

 

En las publicaciones anteriores, vimos cómo utilizar el shell de bash y cómo utilizar Comandos de Linux.

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

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

pwd ; whoami

¡¡En realidad, esto es un script de Bash!!

El comando pwd se ejecuta primero, mostrando el directorio de trabajo actual, luego se ejecuta el comando whoami para mostrar a los usuarios que actualmente están conectados.

Puedes ejecutar múltiples comandos tanto como desee, pero con un límite. Puedes determinar tus max args usando este comando.

 getconf ARG_MAX

Bueno, ¿y qué sucede si pones los comandos en un archivo, y cuando necesitamos ejecutar estos comandos, solo ejecutamos ese archivo? Esto es conocido como un script de Bash.

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

Script de Bash Shebang

La primera línea que escribes al escribir un script bash es el (#!) Seguido del shell que utilizaras.

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

#!/bin/bash

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

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

#!/bin/bash

# This is a comment

pwd

whoami

Puedes escribir múltiples comandos en la misma línea, pero debes separarlos con punto y coma, aunque es preferible escribir comandos en líneas separadas, esto hará que sea más fácil de leer luego.

Establecer los permisos de scripts

Después de escribir tu script de Bash, guarda el archivo.

Ahora, configura ese archivo para que sea ejecutable, de lo contrario, mostrara permisos denegados. Puedes revisar cómo configurar permisos utilizando el comando chmod.

script de Bash tutorial

chmod +x ./myscript

Luego intenta ejecutarlo simplemente escribiéndolo en el shell:

./myscript

Y sí, se ejecuta.

primer intento

 

Crea tu primer script Bash

Como sabemos por otras publicaciones, la impresión de texto se realiza mediante el comando echo.

Edita tu archivo y escribe esto:

#!/bin/bash

# our comment is here

echo "The current directory is:"

pwd

echo "The user logged in is:"

whoami

Mira el resultado:

comando echo

¡Perfecto! Ahora podemos ejecutar comandos y mostrar texto utilizando el comando echo.

Si no conoces el comando echo o cómo editar un archivo, te recomiendo que consultes los artículos acerca de los comandos basicos de Linux

Usando variables

Las variables le permiten almacenar información para usarlas dentro del script.

Puedes definir 2 tipos de variables en tu script de Bash:

  • Variables de entorno
  • Variables de usuario

Variables de entorno

Algunas veces necesitas interactuar con las variables del sistema, puede hacerlo utilizando variables de entorno.

#!/bin/bash

# display user home

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

Observa que ponemos la variable de sistema $ HOME entre comillas dobles, e imprime la variable home correctamente.

variables globales

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

echo "I have $1 in my pocket"

Debido a que 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 como se puede observar:

echo "I have \$1 in my pocket"

¡¡Ahora funciona!!

escape signo de dólar

Variables de usuario

Además, puedes establecer y utilizar variables personalizadas en tu script.

Puedes llamar a las variables de usuario de la misma manera como se muestra a continuación:

#!/bin/bash

# User variables

grade=5

person="Adam"

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

 

chmod +x myscript

./myscript

variables de usuario

 

Sustitución de comando

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

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

  • El carácter comilla simple invertida (`).
  • El formato $ ().

Asegúrate de que cuando escribes el carácter de comilla invertida, no es la comilla simple.

Debes encerrar el comando con comillas invertidas de la siguiente forma:

mydir=`pwd`

O a la inversa:

mydir=$(pwd)

Entonces el script podría ser el siguiente:

#!/bin/bash

mydir=$(pwd)

echo $mydir

La salida del comando se almacenará en la variable mydir.

Sustitución de comando

 

Cálculo matemático

Puedes realizar cálculos matemáticos básicos utilizando la sintaxis $ ((2 + 2)):

#!/bin/bash

var1=$(( 5 + 5 ))

echo $var1

var2=$(( $var1 * 2 ))

echo $var2

Así de fácil.

Cálculo matemático

 

Sentencia if-then

Tus scripts de Bash necesitarán condicionales. Si el valor es menor que 10, haz esto, sino haz aquello. Puedes imaginar cualquier lógica que quieras.

La estructura más básica de la sentencia if-then es así:

if comand; then

hacer algo

fi

Aquí hay un ejemplo:

#!/bin/bash

if whoami; then

	echo "It works"

fi

Dado que el comando whoami devolverá mi usuario, la condición volverá a ser verdadera e imprimirá el mensaje.

Profundicemos y usemos otros comandos que conocemos.

Verificar si un usuario existe

Tal vez estés buscando un usuario específico en el archivo de usuario / etc / passwd y si existe un registro, escríbelo en un mensaje.

#!/bin/bash

user=likegeeks

if grep $user /etc/passwd; then

	echo "No such a user $user"

fi

Sentencia if-then

Utilizamos el comando grep para buscar un usuario en el archivo /etc/passwd file. Puedes revisar nuestro tutorial acerca del comando grep en este enlace.

Su el usuario existe, el script de bash imprimirá este mensaje.

¿Que sucede si un usuario no existe? El script terminara su ejecución sin decirnos que el usuario no existe. Ok, vamos a mejorar esto.

 

Sentencia if-then-else

La sentencia if-then-else statement toma la siguiente estructura:

if comand; then

hacer algo

else

hacer otra cosa

fi

Si el comando se ejecuta y retorna cero; lo cual significa exito, no ejecutara los comandos despues de la sentencia else, por otro lado, si la sentencia if retorna un numero distinto de zero; lo cual significa que la condición no se cumple, en este caso, el shell ejecutara los comandos despues de la sentencia 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

Sentencia if-then-else

Vamos bien por ahora, continuemos.

Ahora, que sucede si necesitamos mas sentencias else.

Bueno, fácil, podemos lograr eso anidando sentencias de la siguiente forma:

if condition; then

commands

elif condition2

then

commands

fi

Si el primer comando retorna zero; lo cual significa que se cumple la priemra condición, ejecutara estos comandos, sino, si se cumple la segunda condición se ejecutara el bloque elif, por último si ninguno de estos se cumple ejecutra solo los comandos ultimos 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

Puedes imaginar cualquier escenario aqui, tal vez si el usuario no existe, puedes crearlo utilizando el comando useradd o hacer cualquier otra cosa.

 

Combianr pruebas

Puedes combianar multiples pruebas utilizando los comandos 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 retornara verdadero solo si ambas pruebas se cumplen, sino, fallara.

Ademas, puedes utilizar 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 retornara exito si una o ambas de las pruebas cumplen.

Fallara solo si ambas fallan.

 

Comparaciones Numericas

Puedes realizar una comparación numérica entre dos valores numéricos utilizando comprobaciones numéricas de comparación como esta:

number1 -eq number2 Comprueba si number1 es igual a number2.

number1 -ge number2 Comprueba si number1 es más grande o igual number2.

number1 -gt number2 Comprueba si number1 es más grande que number2.

number1 -le number2 Comprueba si number1 es más pequeño o igual number2.

number1 -lt number2 Comprueba si number1 es más pequeño que number2.

number1 -ne number2 Comprueba si number1 no es igual a number2.

Como ejemplo, probaremos uno y el resto será el mismo.

Ten en cuenta que la sentencia de comparación se encuentra 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

comparación numérica

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

 

Comparaciones de cadenas

Puedes comparar cadenas con una de las siguientes maneras:

string1 = string2 Comprueba si string1 es idéntico a string2.

string1! = string2 Comprueba si string1 no es idéntico a string2.

string1 <string2 Comprueba si string1 es menor que string2.

string1> string2 Comprueba si string1 es mayor que string2.

-n string1 Comprueba si string1 es más mayor que cero.

-z string1 Comprueba si string1 tiene una longitud de cero.

Podemos aplicar la comparación de cadenas en nuestro ejemplo:

#!/bin/bash

user="likegeeks"

if [ $user = $USER ]; then

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

fi

comparaciones de texto

Una nota complicada sobre las comparaciones mayor o menor de cadenas, DEBEN escaparse con la barra inclinada invertida porque si usas solo el símbolo de mayor que, muestra resultados incorrectos.

Entonces 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

texto mayor que

Se ejecuta pero se muestra esta advertencia:

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

Para solucionarlo, encierra $ vals con comillas dobles, forzándolo a permanecer como una cadena:

#!/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

corrección de texto

Una nota importante acerca del mayor que y menor que para las comparaciones de cadenas. Verifica 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

caso de personaje

sort myfile

likegeeks

Likegeeks

Orden de clasificación

La condición de prueba considera que las letras minúsculas son más grandes que las letras mayúsculas. A diferencia del comando ordenar que hace lo contrario.

La condición de prueba se basa en el orden ASCII, mientras que el comando de ordenamiento se basa en las órdenes de numeración de la configuración del sistema.

 

Comparaciones de archivos

Puede comparar y verificar archivos utilizando los siguientes operadores:

-d my_file Comprueba si es una carpeta.

-e my_file Comprueba si el archivo está disponible.

-f my_file Comprueba si es un archivo.

-r my_file Comprueba si es legible.

my_file -nt my_file2 Comprueba si my_file es más nuevo que my_file2.

my_file -ot my_file2 Comprueba si my_file es más viejo que my_file2.

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

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

Como implican, nunca los olvidarás.

Vamos tomar uno de ellos y utilizarlo 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

revisión de archivos

No los vayas a escribir todos como un ejemplo. Simplemente escribe la comparación entre los corchetes tal como está y completa tu script normalmente.

Hay algunas otras características if-then avanzadas, pero las estudiaremos en otra publicación.

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

Gracias.

Mokhtar Ebrahim
Fundadora de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

2 thoughts on “Script de Bash paso a paso tutorial (con ejemplos)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *