Para saber si una variable existe y está inicializada con un valor distinto a vacío, es decir, que no se ha inicializado con:
variable=""
Lo podemos comprobar con [ "$variable" ]
Veamos un ejemplo y vamos a ir evolucionándolo para ver sus posibilidades:
#!/bin/bash
if [ "$variable" ]
then
echo "La variable existe y no está vacía"
else
echo "La variable no existe o está vacía"
fi
Devuelve:
La variable no existe o está vacía
Ahora vamos a probar con la variable inicializada vacía:
#!/bin/bash
variable=""
if [ "$variable" ]
then
echo "La variable existe y no está vacía"
else
echo "La variable no existe o está vacía"
fi
Y nos vuelve a dar:
La variable no existe o está vacía
Así que vamos a dar un valor. En un alarde de imaginación, a la variable variable le voy a dar un valor de valor:
#!/bin/bash
variable="valor"
if [ "$variable" ]
then
echo "La variable existe y no está vacía"
else
echo "La variable no existe o está vacía"
fi
Y al ejecutarlo, devuelve:
La variable existe y no está vacía
Para comprobar que no está vacía, lo que podemos hacer es comprobar si existe. Si existe y no contiene nada es que su valor es "". Esto lo haremos con [ -n "${variable-unset}" ], que dará verdadero si no existe:
#!/bin/bash
variable="valor"
if [ "$variable" ]
then
echo "La variable existe y no está vacía"
else
if [ -n "${variable-unset}" ]
then
echo "La variable no existe"
else
echo "La variable existe pero está vacía"
fi
fi
Que nos devuelve:
La variable existe y no está vacía
Y ahora probaremos si la cadena está vacía:
#!/bin/bash
variable=""
if [ "$variable" ]
then
echo "La variable existe y no está vacía"
else
if [ -n "${variable-unset}" ]
then
echo "La variable no existe"
else
echo "La variable existe pero está vacía"
fi
fi
Que devuelve:
La variable existe pero está vacía
Y sin variable (la comento):
#!/bin/bash
# variable=""
if [ "$variable" ]
then
echo "La variable existe y no está vacía"
else
if [ -n "${variable-unset}" ]
then
echo "La variable no existe"
else
echo "La variable existe pero está vacía"
fi
fi
Que devuelve:
La variable no existe