Variables y parámetros de un script en Bash

Vídeo


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:

$ 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:

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

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 $:

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:

$ ./variables

Pero, ¡oh! nos muestra un error ¿por qué? Es porque no es un fichero ejecutable. Teclea lo siguiente:

$ ls -l

Verás un resultado similar a éste:

-rw-r--r-- 1 gorka gorka 110 jun 30 10:39 variables

Fíjate en la primera parte:

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:

$ chmod +x variables

Si ahora comprobamos los permisos de nuevo:

-rwxr-xr-x 1 gorka gorka 110 jun 30 10:39 variables

Perfecto, ahora sí:

./variables

y el resultado será:

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:

mensaje= "Hola bash"

ni ésto:

mensaje ="Hola bash"

Porque ambas te van a dar un error similar a éste:

./variables: line 3: mensaje: command not found

Usando las variables

Podemos usar las variables dentro de una cadena:

echo "Contenido de la variable: $mensaje"

que nos mostrará:

Contenido de la variable: Hola bash

Si usamos la variable por ella sola se ejecutará como si fuera un comando de bash:

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

$ ./variables valor1

Para poder acceder a esos parámetros podemos usar las variables $1, $2, $3, etc.

#!/bin/bash

echo $1

Y el resultado sería:

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:

$ ./variables "Este es el primer valor" "Y este el segundo"

Si el script fuera éste:

#!/bin/bash

echo "Primer parámetro: $1"
echo "Segundo parámetro: $2"

El resultado sería:

Primer parámetro: Este es el primer valor
Segundo parámetro: Y este el segundo

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.

#!/bin/bash
echo $PATH

También podemos definir en la consola nuestras propias variables de entorno:

$ export VARIABLE='Variable de entorno'

después podremos usarla en nuestro script:

echo $VARIABLE
Autor:
Nivel: Principiante
Palabras clave:
Fecha publicado:
Fecha actualizado: 17-08-2016

Otros capítulos de la misma serie

Este capítulo es parte de la serie: Programación en BASH.

Y muchos más en preparación.

Disponible en los planes: Laravel hero PHP a tope