Escribí un script que analiza un archivo y establece variables de acuerdo con un ancho fijo dentro del archivo.
Luego quiero verificar cada variable y, si es un campo en blanco, establecerlo en "0". Una variación simple de esto sería:
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
echo num is $num
done
me da una salida de:
num is 1
num is 3
Lo que quiero hacer es codificar para if $two is null then two=0
.
¿Cómo puedo hacer eso?
Respuesta1
Quieres el operador de comparación -z http://tldp.org/LDP/abs/html/comparison-ops.html
if [ -z $two ]; then ## or [ -z $num ] to test them all
two=0
fi
echo "num is $num"
Respuesta2
Tu pregunta no tiene mucho sentido. En primer lugar, si dices
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
︙
entonces la for
declaración se interpreta como
for num in 1 3
y entonces solo hay dos iteraciones, num
iguales a 1
y 3
. Si desea tener cuatro iteraciones, num
iguales a 1
, (nulo) 3
y (nulo), entonces debe decir
for num in "$one" "$two" "$three" "$four"
Debe citar referencias de variables de shell a menos que tenga una buena razón para no hacerlo y esté seguro de saber lo que está haciendo.
Entonces,
for num in "$one" "$two" "$three" "$four"
do
echo "num is $num"
done
resultará en
num is 1
num is
num is 3
num is
Ahora, si quieres que los resultados digan 1
, 0
, 3
, 0
es una simple cuestión de decir
for num in "$one" "$two" "$three" "$four"
do
if [ "$num" = "" ]
then
num=0
fi
echo "num is $num"
done
Tenga en cuenta que
- Debes tener espacios en blanco antes y después de
[
, - Debes tener espacios en blanco antes y después de
=
, - Debes tener espacios en blanco antes
]
(y después, si hay algo más después), y fi
seif
escribe al revés.
Pero el título de su pregunta menciona "variables no configuradas".
two
y four
soncolocara una cadena en blanco;
five
y six
(y orange
, pumpkin
, tiger
y una lista casi infinita de otros nombres de variables potenciales) sondesarmado. Hay una diferencia. Siesoes lo que te interesa, necesitas hacer una pregunta diferente, porque, si lo haces
for num in "$one" "$two" "$three" "$four" "$five" "$six" "$orange" "$pumpkin" "$tiger"
do
︙
entonces será imposible distinguir las iteraciones five
, six
, orange
,
pumpkin
y , de las iteraciones y - se establecerá en una cadena en blanco en los siete casos. Necesitaría probar las variables y (etc.) directamente.tiger
two
four
num
$four
$five
PD: No hagas una nueva pregunta; haz una búsqueda. Esto ya ha sido respondido antes.