Saber si una variable existe y no está vacía en Shell Script
Saber si una variable existe
Podemos comprobar si una variable existe o no, expandiendo el nombre de la variable. Por ejemplo si una variable se llama variable la podemos expandir con ${variable+x} o con ${variable-unset}, por lo que podemos comprobar si existe o no con:
#!/bin/bash
if [ "${variable-unset}" ]
then
echo La variable no existe
else
echo La variable existe
fi
variable=
if [ "${variable-unset}" ]
then
echo La variable no existe
else
echo La variable existe
fi
Al principio no existe la variable y la declaro vacía en la línea 10. Veamos qué devuelve:
La variable no existe La variable existe
Y ahora vamos a cambiar ${variable-unset} por ${variable+x} para hacer la comprobación inversa: en lugar de comprobar si no existe, vamos a comprobar si existe:
#!/bin/bash
if [ "${variable+x}" ]
then
echo La variable existe
else
echo La variable no existe
fi
variable=
if [ "${variable+x}" ]
then
echo La variable existe
else
echo La variable no existe
fi
Que devuelve:
La variable no existe La variable existe
Saber si la variable está vacía
Otras veces nos puede interesar saber si una variable contiene algo o no. Lo podemos comprobar con if [ "$variable" ] que devuelve verdadero si existe y contiene algo y falso en caso contrario. Y ese «algo» puede ser cualquier cosa: una cadena de texto, un número, un array…
#!/bin/bash
var1=
var2=5
var3="Hola, mundo"
var4=(uno dos tres)
if [ "$var1" ]
then
echo \$var1 existe y contiene algo
fi
if [ "$var2" ]
then
echo \$var2 existe y contiene algo
fi
if [ "$var3" ]
then
echo \$var3 existe y contiene algo
fi
if [ "$var4" ]
then
echo \$var4 existe y contiene algo
fi
Que nos devuelve:
$var2 existe y contiene algo $var3 existe y contiene algo $var4 existe y contiene algo
Como var1 existe, pero no contiene nada, lo obvia. Lo mismo pasaría si contuviese una cadena vacía:
#!/bin/bash
cadenavacia=""
if [ "$cadenavacia" ]
then
echo \$cadenavacia existe y contiene algo
else
echo \$cadenavacia o no existe o no contiene nada
fi
Que devuelve:
$cadenavacia o no existe o no contiene nada
Comprobar si una variable existe o no y si está vacía o no
Podemos unir la comprobación de si una variable existe o no y si está vacía o no. Vamos a probar tres casos:
#!/bin/bash
var=
var1="Hola, mundo"
if [ "$var" ]
then
echo La variable existe y no está vacía
elif [ "${var+x}" ]
then
echo La variable existe, pero está vacía
else
echo La variable no existe
fi
if [ "$var1" ]
then
echo La variable existe y no está vacía
elif [ "${var1+x}" ]
then
echo La variable existe, pero está vacía
else
echo La variable no existe
fi
if [ "$var2" ]
then
echo La variable existe y no está vacía
elif [ "${var2+x}" ]
then
echo La variable existe, pero está vacía
else
echo La variable no existe
fi
que nos devuelve:
La variable existe, pero está vacía La variable existe y no está vacía La variable no existe

