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

 

 

 

 

 

 

 

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.