7.1 Programando con Bash¶
Autora: Dra. Alejandra Rougon
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?