Ich habe ein Skript geschrieben, das eine Datei analysiert und Variablen entsprechend einer festen Breite innerhalb der Datei festlegt.
Ich möchte dann jede Variable prüfen und, wenn es ein leeres Feld ist, auf "0" setzen. Eine einfache Variante davon wäre:
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
echo num is $num
done
gibt mir eine Ausgabe von:
num is 1
num is 3
Ich möchte Code für erstellen if $two is null then two=0
.
Wie kann ich das machen?
Antwort1
Sie möchten den Vergleichsoperator -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"
Antwort2
Ihre Frage ergibt nicht viel Sinn. Erstens, wenn Sie sagen
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
︙
dann for
wird die Aussage interpretiert als
for num in 1 3
und es gibt also nur zwei Iterationen mit num
gleich 1
und . Wenn Sie vier Iterationen mit gleich , (null) und (null) 3
haben möchten , müssen Sie sagennum
1
3
for num in "$one" "$two" "$three" "$four"
Sie sollten Shell-Variablenreferenzen in Anführungszeichen setzen, es sei denn, Sie haben einen guten Grund, dies nicht zu tun, und Sie sind sicher, dass Sie wissen, was Sie tun.
Also,
for num in "$one" "$two" "$three" "$four"
do
echo "num is $num"
done
wird darin enden, dass
num is 1
num is
num is 3
num is
1
Wenn Sie nun als Ergebnis , 0
, 3
, , wünschen 0
, müssen Sie nur sagen
for num in "$one" "$two" "$three" "$four"
do
if [ "$num" = "" ]
then
num=0
fi
echo "num is $num"
done
Beachten Sie, dass
[
Vor und nach dem , müssen Leerzeichen vorhanden sein .=
Vor und nach dem , müssen Leerzeichen vorhanden sein .- Sie müssen Leerzeichen vor dem
]
(und danach, falls noch etwas danach kommt) haben und fi
wirdif
rückwärts buchstabiert.
Aber in Ihrem Fragentitel steht „nicht gesetzte Variablen“.
two
Und four
sindSatzin eine leere Zeichenfolge;
five
und six
(und orange
, pumpkin
, tiger
, und eine quasi unendliche Liste anderer möglicher Variablennamen) sindnicht gesetztEs gibt einen Unterschied. WennDasist das, was Sie interessiert, müssen Sie eine andere Frage stellen, denn wenn Sie
for num in "$one" "$two" "$three" "$four" "$five" "$six" "$orange" "$pumpkin" "$tiger"
do
︙
dann ist es unmöglich, die Iterationen five
, six
, orange
,
pumpkin
, und , von den Iterationen und zu unterscheiden – wird in allen sieben Fällen auf eine leere Zeichenfolge gesetzt. Sie müssten die Variablen und (usw.) direkt testen.tiger
two
four
num
$four
$five
PS: Stellen Sie keine neue Frage. Führen Sie eine Suche durch. Dies wurde bereits beantwortet.