Con este artículo voy a empezar una serie de programación en la consola bash (Bourne Again Shell).
Comenzamos creando un fichero que va a contener nuestro primer script. A este fichero lo vamos a llamar “variables”. Yo voy a usar el editor nano, que es uno de los que a mí personalmente más me gusta para la consola. Puede usar vi, vim, emacs, joe o el que más te guste:
1 |
$ nano variables |
(este símbolo $ del principio representa la línea de comandos, no es necesario que lo teclees).
Los scripts es conveniente que contengan esta primera línea:
1 |
#!/bin/bash |
Con esta línea le estamos diciendo al sistema operativo con qué consola tiene que ejecutar el script. En este caso es bash. Podría ser también un script en sh, csh, Python, Perl, o cualquier otro intérprete.
Ahora definimos nuestra primera variable:
1 |
mensaje='Hola bash' |
En este ejemplo mensaje es el nombre que le vamos a dar a la variable.
Para los que no lo sepáis una variable es lo que usamos para almacenar información de manera temporal.
Un par de notas con respecto a los nombres de las variables:
- Bash es sensible a las mayúsculas, así que MENSAJE no es la misma variable que mensaje.
- Las mayúsculas se suelen usar para las variables de sistema, scripts de arranque y similares. Suele ser conveniente usar las variables de nuestros scripts en minúculas. Pero, al fin y al cabo, es cuestión de gustos.
Cuando la variable tiene un nombre compuesto, por ejemplo “ruta fichero” las dos formas más habituales para nombrarla son:
- rutaFichero. A esta forma se la llama Camel Case.
- ruta_fichero. A esta forma se la llama lower_under o Snake Case.
¿Cuál usar? Es cuestión de gustos, pero elige una forma y úsala siempre dentro de un script. No hay nada más confuso que andar mezclando las dos notaciones. Como estoy acostumbrado a Laravel y Prestashop yo tiendo a usar camelCase.
Para mostrar el contenido de la variable o usarla en algún otro lugar de nuestro script usaremos el nombre de la variable anteponiendo el símbolo $:
1 |
echo $mensaje |
Permisos de ejecución
(qué mal me ha sonado siempre eso de permisos de ejecución).
Ha llegado el momento de ejecutar el script. Para eso vamos a la consola (puede abrir otra o salir del fichero que estás editando).
Para ejecutar un script usamos la siguiente forma:
1 |
$ ./variables |
Pero, ¡oh! nos muestra un error ¿por qué? Es porque no es un fichero ejecutable. Teclea lo siguiente:
1 |
$ ls -l |
Verás un resultado similar a éste:
1 |
-rw-r--r-- 1 gorka gorka 110 jun 30 10:39 variables |
Fíjate en la primera parte:
1 |
rw-r--r-- |
Estos son los permisos que tiene el archivo. No voy a entrar en mucho detalle pero para resumir dirá que los permisos se dividen en tres partes:
- rw- : estos son los permisos que tiene el propietario del archivo.
- r– : estos son los permisos del grupo.
- r– : estos son los permisos del resto (los usuarios que no son propietarios ni del grupo).
Las letras singifican:
r – read
w – write
x – ejecución (como ves no hay ninguna x así que el archivo no se puede ejecutar)
Para solucionar el error podemos hacer:
1 |
$ chmod +x variables |
Si ahora comprobamos los permisos de nuevo:
1 |
-rwxr-xr-x 1 gorka gorka 110 jun 30 10:39 variables |
Perfecto, ahora sí:
1 |
./variables |
y el resultado será:
1 |
Hola bash |
Cuidado con los espacios
Cuando defines una variable ten mucho cuidado con los espacios. No puede haber espacios ni delante ni después del ‘=’ o tendremos un error. Por ejemplo no se puede hacer ésto:
1 |
mensaje= "Hola bash" |
ni ésto:
1 |
mensaje ="Hola bash" |
Porque ambas te van a dar un error similar a éste:
1 |
./variables: line 3: mensaje: command not found |
Usando las variables
Podemos usar las variables dentro de una cadena:
1 |
echo "Contenido de la variable: $mensaje" |
que nos mostrará:
1 |
Contenido de la variable: Hola bash |
Si usamos la variable por ella sola se ejecutará como si fuera un comando de bash:
1 2 3 4 5 |
#!/bin/bash comando="ls -las" $comando |
Al ejecutar el script se sustituye $comando por ls -las.
Parámetros del script
Cuando ejecutamos un script podemos pasarle parámetros, por ejemplo:
1 |
$ ./variables valor1 |
Para poder acceder a esos parámetros podemos usar las variables $1, $2, $3, etc.
1 2 3 4 5 |
#!/bin/bash echo $1 |
Y el resultado sería:
1 |
valor1 |
La variable $1 recoge el primer parámetro, $2 el segundo, etc. Si tenemos más de nueve parámetros podemos acceder a ellos usando ${10}, ${11}, etc.
También podemos usar comillas en los paŕámetros:
1 |
$ ./variables "Este es el primer valor" "Y este el segundo" |
Si el script fuera éste:
1 |
El resultado sería:
1 |
También podemos usar el array $@, que recoge todos los parámetros, pero hablaremos de eso en otro artículo.
Variables de entorno
En nuestro script podemos usar todas las variables de entorno existentes, por ejemplo la variable $PATH.
1 2 3 |
#!/bin/bash echo $PATH |
También podemos definir en la consola nuestras propias variables de entorno:
1 |
$ export VARIABLE='Variable de entorno' |
después podremos usarla en nuestro script:
1 |
echo $VARIABLE |
Vídeo
Por si eres de los que prefieren que les cuenten las cosas en lugar de leerlas te dejo aquí: