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