Você precisa de um espaço entre "$ non" e], e não precisa de ():
if [ -z "$var" ] && [ -z "$non" ]
Estou tentando executar um script pequeno que verifica duas variáveis para ver se elas estão vazias ou não. Eu estou recebendo a saída correta, mas se também me mostra erro por perder o parêntese direito. Eu tentei usar parênteses duplos, bem como colchetes, mas não funcionou.
var=""
non="hi"
if ([ -z "$var"] && [ -z "$non"])
then
echo "both empty"
else
echo "has data"
fi
OUTPUT :
line 6: [: missing ']'
has data
Como Andy Dalton disse em sua resposta, você precisa de um espaço entre "$ non" e o colchete de fechamento entre parênteses ] assim:
[ -z "$non" ]
Eu só quero adicionar um pouco de motivação porque isso é necessário. No bash, os parênteses quadrados são comandos (você pode tentar man [ para ver, é o manual do comando teste ), então você precisa do espaço para bash para descobrir quais comando que você está invocando.
Tags shell-script