7.1 Programando con Bash

Autora: Dra. Alejandra Rougon

Creative Commons License
Este trabajo está bajo la licencia Creative Commons Atribución-No Comercial 4.0 Licencia Internacional.

🔍 Objetivos de aprendizaje

Después de completar esta lección aprenderás:

  • ¿Qué es un script de bash?

  • Lo básico de la programación en bash

  • ¿Cómo usar variables en bash?

  • ¿Cómo hacer un for loop en bash?

Es posible que algunas veces quieras correr el mismo comando muchas veces o una serie de comandos en muchos archivos. O tal vez quieras buscar no sólo una cadena si no una lista de cadenas, o iterar sobre algo algún número de veces. En estos casos, puedes escribir scripts en bash, así como lo harías en otros lenguajes de programación (e.g. python, perl). Un script es un programa que puede ser ejecutado por un interprete. En este caso el interprete sería bash. El script no tiene que ser compilado como los programas escritos en otros lenguajes como C o C++. El script más simple sería imprimir a la pantalla Hello world!. Vamos a crear un directorio llamado Activity en el directorio Documents y después crearemos un archivo que contendrá nuestro script y lo ejecutaremos con sh.

$ cat > helloworld.sh
echo Hello world!

$ sh helloworld.sh
Hello world!

Buenas prácticas

Es una buena práctica agregar la extensión .sh a los scripts de bash. También es buena práctica agregar #! en la primera línea, seguido de la ruta del ejecutable de bash. De esa manera también podrás correr el script volviéndolo ejecutable y sin el comando sh. Finalmente también es recomendable agregar comentarios que expliquen tu código. También puedes agregar líneas vacías dónde necesites para que se vea limpio y organizado. Así es que tu primer archivo podría ser mejorado así.

#!/bin/bash

# This is my first script and will 
# print Hello world! to the screen

echo Hello world!

Ahora puedes ejecutarlo con sh

sh helloworld.sh

o con

chmod +x helloworld.sh
./myfirstscript.sh

Si quieres ejecutar una serie de comandos secuencialmente solamente agrega el siguiente comando a a la siguiente línea.

#!/bin/bash

# This is my first script and 
# will print Hello world! to the screen

echo Hello world!
echo This is my first file
echo It is stored in the following path
pwd
$ sh helloworld.sh 
Hello world!
this is my first file
it is stored in the following path
/root/sandbox/Documents/Activity

Variables

Una variable en la programación con el shell de bash, como en otros lenguajes, es una ubicación en la memoria que es utilizada para contener un número, un carácter, una cadena, etc.. Los tipos de datos más utilizados para variables serían, entero [integer] (46), cadena [string] (apple), decimal o de punto flotante [float] (0.24), y un booleano [boolean] (FALSE). El tipo de dato de una variable tiene que estar definido cuando la variable se declara en lenguajes de programación de tipado fuerte. Sin embargo, Bash es un tipo de programación de tipado débil y no hay necesidad de definir la variable. Variables are declared with the = sign, and are called with the $ sign.

$ a=apple
$ echo $a
apple

Es recomendable usar comillas. En bash, las comillas sencillas y las dobles tienen diferente significado. Las comillas dobles también son llamadas “comillas débiles”. Si almacenas una variable la puedes llamar con las comillas dobles y te dará el contenido guardado en la variable.

$ a=apple
$ b="Value of a is $a"
$ echo $b
Value of a is apple

Las comillas sencillas o ‘comillas fuertes’ te darán una interpretación literal de lo que encierran.

$ a=apple
$ b='Value of a is $a'
$ echo $b
Value of a is $a

cuando no estás llamando a una variable o no estás usando expresiones regulares no hace ninguna diferencia usar sencillas o dobles.

a='apple'

o

a="apple"

Vamos a crear un script llamado variable.sh

#!/bin/bash

#This script prints Hello world! 
#to the screen and uses a variable.

Greet='Hello world!'
echo "$Greet"
$ sh variable.sh
Hello world!

Bucles

Para iterar sobre comandos podemos utilizar bucles [loops]. El bucle for es representado en los siguientes ejemplos:

for variable in 1 2 3 4 5 .. N
do
	command1
	command2
	commandN
done
for variable in file1 file2 file3
do
	command1 on $variable
	command2
	commandN
done

Ahora vamos a crear un script con saludos con un bucle for. Ahora en lugar de imprimir Hello world! vamos a imprimir un saludo para cada continente.

#!/bin/bash

#This script prints a greeting for each continent. 

continents="Africa Americas Antartica Asia Australia Europe"

for item in $continents
do
  echo "Hello $item" 
done

La variable continents contiene 6 objetos Africa Americas Antartica Asia Australia Europe. En el bucle for la variable item recorrerá cada uno de esos objetos de la variable continents , llamada con $continents .

Cada uno de ellos será impreso en cada uno de los ciclos del bucle con echo mientras son llamados con $item en cada iteración.

$ sh hellocontinents.sh 
Hello Africa
Hello Americas
Hello Antartica
Hello Asia
Hello Australia
Hello Europe

Si queremos guardar la salida de nuestro script en un sólo archivo podemos dirigir la salida con >>

#!/bin/bash

#This script prints a greeting for each continent 
#and saves the output to the file Greetings.txt 

continents="Africa Americas Antartica Asia Australia Europe"

for item in $continents
do
  echo "Hello $item" >> Greetings.txt
done

Si queremos guardar la salida en diferentes archivos podríamos hacerlo así

#!/bin/bash

#This script prints a greeting for each continent 
#and saves the output into a different file for each continent.

continents="Africa Americas Antartica Asia Australia Europe"

for item in $continents
do
  echo "Hello $item" > Greet.$item
done

🔑 En esta lección has aprendido

  • ¿Qué es un script de bash?

  • Lo básico de la programación en bash

  • ¿Cómo usar variables en bash?

  • ¿Cómo hacer un bucle for en bash?