Você quer o operador de comparação -z link
if [ -z $two ]; then ## or [ -z $num ] to test them all
two=0
fi
echo "num is $num"
Eu escrevi um script que analisa um arquivo e define variáveis de acordo com uma largura fixa dentro do arquivo.
Eu, então, quero verificar cada variável e, se for um campo em branco, defina como "0". Uma simples variação disso seria:
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
echo num is $num
done
me dá uma saída de:
num is 1
num is 3
O que eu quero fazer é codificar if $two is null then two=0
.
Como posso fazer isso?
Você quer o operador de comparação -z link
if [ -z $two ]; then ## or [ -z $num ] to test them all
two=0
fi
echo "num is $num"
Sua pergunta não faz muito sentido. Primeiro de tudo, se você disser
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
︙
, a declaração for
é interpretada como
for num in 1 3
e, portanto, há apenas duas iterações, com num
igual a 1
e 3
.
Se você quiser ter quatro iterações,
com num
igual a 1
, (null), 3
e (null), então você precisa dizer
for num in "$one" "$two" "$three" "$four"
Você deve citar referências de variáveis de shell a menos que você tenha uma boa razão para não e você tem certeza de que sabe o que está fazendo.
Então,
for num in "$one" "$two" "$three" "$four"
do
echo "num is $num"
done
resultará em
num is 1
num is
num is 3
num is
Agora, se você quiser que os resultados mostrem 1
, 0
, 3
, 0
,
é uma simples questão de dizer
for num in "$one" "$two" "$three" "$four"
do
if [ "$num" = "" ]
then
num=0
fi
echo "num is $num"
done
Note que
[
=
]
(e depois disso, se houver mais alguma coisa depois disso) e fi
é if
soletrado para trás. Mas o título da sua pergunta menciona "variáveis não definidas".
two
e four
são set para uma string em branco;
five
e six
(e orange
, pumpkin
, tiger
,
e uma lista quase infinita de outros nomes de variáveis potenciais)
são não definidos . Existe uma diferença.
Se isso é o que você está interessado,
você precisa fazer uma pergunta diferente, porque, se você fizer
for num in "$one" "$two" "$three" "$four" "$five" "$six" "$orange" "$pumpkin" "$tiger"
do
︙
então será impossível distinguir o five
, six
, orange
,
pumpkin
e tiger
, iterações das iterações two
e four
-
num
será definido como uma string em branco nos sete casos.
Você precisaria testar as variáveis $four
e $five
(etc.) diretamente.
P.S. Não faça uma nova pergunta; faça uma pesquisa. Isso foi respondido antes.