Blog
El lenguaje Bash es un lenguaje de scripting instalado por defecto en los sistemas Linux.
Ejecución de scripts Bash
Un script Bash es un simple archivo que contiene líneas de código escritas en Bash que pueden ser ejecutadas. En su base, contiene un shebang, que corresponde a un indicador de la ubicación del shell que se utilizará para ejecutar el código, y tiene la forma:
#!/bin/bash
Esto es algo que encontrarás en muchos scripts, no sólo en los de Bash: por ejemplo, al comienzo de un script de Python, puedes encontrar una línea como #!/bin/python3. Esto permite que el archivo se ejecute solo.
Abre un archivo llamado script.sh con nano. Añade el shebang correspondiente a Bash y otra línea listando el contenido del directorio /. Luego deja de editar el archivo y guárdalo.
Hay dos formas de ejecutar el programa:
bash script.sh ./script.sh
En el primer caso, sólo leemos el contenido del fichero y se lo pasamos a Bash. En el segundo caso, lo ejecutamos. Por defecto, esto debería provocar un error, ya que no tienes derecho a ejecutar este archivo.
Modifica los derechos para que este fichero sea ejecutable por ti e intenta ejecutarlo de nuevo:
chmod +x script.sh
Conceptos básicos de Bash
Comentarios
En primer lugar, como en cualquier lenguaje de programación, puedes comentar partes de tu código. Para ello, puedes comentar una línea utilizando # al principio.
Definir una variable
Para definir una variable, podemos utilizar =. Por ejemplo, podemos definir la variable my_variable de la siguiente manera:
my_variable=hello
Prueba a utilizar el comando echo para imprimir el contenido de la variable:
echo my_variable
Debería ver que este comando devuelve my_variable. Esto se debe a que debe hacer referencia al valor de la propia variable precediéndola de $.
Prueba la siguiente línea de código para comprobarlo:
echo $my_variable
Ten en cuenta que las variables no están tipadas y deben aparecer como matrices o listas de caracteres, pero algunas pueden utilizarse para operaciones aritméticas, comparaciones, etc.
Comillas
Si quieres asignar una frase a una variable, te encontrarás con algunos problemas:
Prueba con:
my_variable=hello world
Nos damos cuenta de que el espacio rompe la asignación de la variable. Debes utilizar comillas para definir correctamente tu variable:
my_variable="hello world" echo $my_variable
Existen varios tipos de comillas: ‘, “ y ` .
Para entender las diferencias entre las dos primeras, ejecuta las siguientes líneas:
echo 'the content of my variable is $my_variable' echo "the content of my variable is $my_variable"
Este último se utiliza para asignar el resultado de un comando Bash a un archivo:
my_variable=`ls -l` echo $my_variable
Operaciones matemáticas
Podemos definir operaciones matemáticas en Bash utilizando la palabra clave let:
let "a=1" let b=2 let "c=b" let "d = a + b * c" echo $d
Las operaciones matemáticas son bastante similares a las de otros lenguajes de programación: +, –, *, /, **, … .
Tablas
Podemos definir objetos similares a las listas de matrices (array), para almacenar varios valores a la vez:
my_array=(hello world)
Para acceder a los distintos valores de la matriz, podemos utilizar la siguiente sintaxis, teniendo en cuenta que la indexación de matrices comienza en 0:
echo ${my_array[0]}
Para asignar nuevos valores, podemos utilizar:
my_array[0]=Hi echo ${my_array[0]}
Y para devolver la matriz completa, simplemente sustituimos el índice por * .
echo ${my_array[*]}
Para añadir elementos a la lista, basta con asignar valores a los índices que aún no están asignados en la tabla:
my_array[2]=or my_array[4]=hello my_array[1000]=world echo ${my_array[*]}
Ten en cuenta que el índice no tiene por qué ser completo, en el sentido de que los índices no tienen por qué seguirse unos a otros.
Además, las tablas presentan dos funciones interesantes:
- echo ${!mi_matriz[*]} devuelve los índices de los elementos.
- echo ${#mi_matriz[*]} devuelve el número de elementos.
Bucles y condiciones
-
If
Para comprobar una condición y realizar una operación si se cumple, podemos utilizar una estructura if-then-fi:
firstname="Daniel" if [ $firstname = "Daniel" ] then echo "Hi Daniel!" fi
Si deseas añadir otra instrucción, puedes hacerlo con:
firstname="Daniel" if [ $firstname = "Daniel" ] then echo "Hi Daniel!" else echo "Hello" + $firstname +"!" fi
Si queremos encadenar condiciones para comprobar varios casos:
firstname="Diane if [ $firstname = "Daniel" ] then echo "Hi Daniel! " elif [ $firstname = "Diane" ] then echo "Hi Diane" else echo "Hello" + $firstname +"!" fi
Hay muchos elementos que podemos utilizar para crear una condición:
- $var1 = $var2 comprueba la igualdad de matrices de caracteres;
- $var1 != $var2 comprueba la desigualdad de matrices de caracteres;
- -z $variable comprueba si la matriz de caracteres está vacía;
- -n $variable comprueba si la matriz de caracteres no está vacía;
- $var1 -eq $var2 comprueba la igualdad de valores numéricos;
- $var1 -ne $var2 comprueba la desigualdad de valores numéricos;
- $var1 -gt $var2 prueba var1 > var2 ;
- $var1 -lt $var2 prueba var1 < var2 ;
- $var1 -ge $var2 prueba var1 >= var2 ;
- $var1 -the $var2 test var1 <= var2 .
Para combinar dos condiciones, podemos utilizar && (AND) si queremos que ambas condiciones sean verdaderas y || (OR) si queremos que al menos una de las dos condiciones sea verdadera:
firstname="Diane name="Datascientest" if [ $firstname="Daniel" ] && [ $lastname="Datascientest" ] then echo "Hello Daniel Data" else echo "Hello" + $firstname + $lastname fi
While
Para realizar un bucle while, la sintaxis es la siguiente:
let i=0 while [ $i -lt 10 ] do let "i=i+1" done echo $i
For
Para realizar un bucle for (para…), la sintaxis es la siguiente:
for x in '1st iteration' '2nd iteration' '3rd iteration' do echo $x done
Una función interesante para estos bucles es seq. Esta función proporciona una secuencia de enteros desde un entero inicial hasta un entero final como sigue:
Ejecuta el siguiente código:
seq 3 22
Funciones
Hay dos maneras de definir una función:
my_function () { echo "We can do something here" }
O
function my_function { echo "We can do something here" }
Los argumentos que se pasan a la función vienen dados por su número. Por ejemplo, una función que muestre el entonces el segundo argumento tendrá el siguiente aspecto:
function my_function { echo "First argument" echo $1 echo "Second argument" echo $2 }
Por último, para llamar a my_function, basta con escribir:
my_function "Daniel" "24"