Archivo de la categoría: Linux

Las variables en el shell de Linux

Cuando trabajamos con el shell de linux (el bash) podemos definir variables como las de cualquier lenguaje de programación. Para ello pondremos le nombre de la variable seguido de un signo igual (=) y el texto que queramos asignar. Es importante no dejar espacios en blanco, y si el texto lo tiene lo pondremos entre comillas. Ejemplos (jpons@shell-sisop:~$ es el prompt que escribe el shell de mi servidor Linux):

jpons@shell-sisop:~$ A=texto
jpons@shell-sisop:~$ A = texto
-bash: A: orden no encontrada
jpons@shell-sisop:~$ B=texto largo
-bash: largo: orden no encontrada
jpons@shell-sisop:~$ B="texto largo"

Podemos ver que si dejamos espacios en blanco obtenemos errores.

Una vez hemos definido su valor, podemos acceder al contenido poniendo el símbolo del dolar ($) seguido del nombre de la variable. El shell sustituye literalmente $nombre por su valor antes de procesar la línea. La única excepción a esta regla es que $nombre esté encerrado entre comillas simples. Ejemplos:

jpons@shell-sisop:~$ echo $A
texto
jpons@shell-sisop:~$ echo $B
texto largo
jpons@shell-sisop:~$ echo "$A $B"
texto texto largo
jpons@shell-sisop:~$ echo "$A$B"
textotexto largo
jpons@shell-sisop:~$ echo '$A$B'
$A$B

Antes de ejecutar la orden echo, el shell sustituye las variables por sus valores, es algo similar a una función buscar y remplazar de nuestro editor de texto, esto nos permite concatenar textos con valores de variables, pero si el texto debe ir inmediatamente después de nuestra variable debemos usar una sintaxis alternativa (con llaves) para evitar ambigüedades. Ejemplos:

jpons@shell-sisop:~$ echo pre$A
pretexto
jpons@shell-sisop:~$ echo $As

jpons@shell-sisop:~$ echo ${A}s
textos

Al poner $As el shell muestra el valor de una variable denominada «As» que no hemos definido previamente y por tanto el resultado es una tira nula. Con la sintaxis ${A}s que claro que queremos la variable A junto a la letra s.

Por último para terminar este pequeño artículo sobre variables, introduciremos la orden export que indica que queremos que nuestra variable pase a ser una variable de entorno. Una variable de entorno es aquella que se transmite a todos los programas que ejecuta el shell, por tanto si queremos que un programa pueda acceder a nuestra variable debemos «exportarla».

Como ejemplo vamos a escribir con un editor un archivo que llamaremos verAyB.sh (por ejemplo con la orden nano verAyB.sh) con el siguiente texto:

echo A vale $A y B vale $B

Después probaremos nuestro programa y las siguientes órdenes:

jpons@shell-sisop:~$ chmod +x verAyB.sh
jpons@shell-sisop:~$ ./verAyB.sh
A vale y B vale
jpons@shell-sisop:~$ export A
jpons@shell-sisop:~$ ./verAyB.sh
A vale texto y B vale
jpons@shell-sisop:~$ export B
jpons@shell-sisop:~$ ./verAyB.sh
A vale texto y B vale texto largo

Vemos que hasta que no hemos exportado las variables no dan ningún valor desde dentro del programa.

Podemos ver la lista completa de variables de entorno con la orden env.

Podéis ampliar información sobre las variables en la página de manual del bash (orden man bash)