Prüfung des Inhaltes einer Variable im Shell Script

Post Reply
Message
Author
miki

Prüfung des Inhaltes einer Variable im Shell Script

#1 Post by miki »

hi folks,

folgendes problem: ich will eine variable auf ihren Inhalt prüfen (einfach nur ob einer da ist)
var1=hier/steht/etwas

if [ $var1 == "" ]
then
..
else
..
fi
aber so tach ein Fehler in der Syntax auf:
operant expected( error token is : "hier/steht/etwas

kann mir da jemand helfen?
danke im vorraus

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#2 Post by jochen »

Wenn Du eine Variable auf leeren Inhalt testen willst, verwende -z :

Code: Select all

if [ -z "$var1" ] ; then
    echo var1 ist leer
else
    echo var1 ist nicht leer
fi
Setze ausserdem Anführungszeichen ("") um die Variable, wenn sie leer sein kann, da die Shell sonst $var ganz aus der Zeile schmeisst und dann meist Operanden fehlen.

Allerdings habe ich Dein Skript mal per C'n'P übernommen und nur ".." durch echo ersetzt - die Fehlermeldung kommt bei mir nicht. Bist Du sicher, dass Du das Skript durch die bash ausführen lässt?

Jochen
Die grösste Lüge der EDV? "Mal eben..."

miki

#3 Post by miki »

danke für antwort jochen,
ich glaube der fehler liegt hier:

var1=/linux/test
zahl=1
var3=$[var$zahl]

echo $var3

rauskommen sollte jetzt:

/linux/test

aber das passiert nicht....dann kommt die fehlermeldung

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#4 Post by jochen »

Schau mal hier, da liegt das Problem ähnlich: http://www.pl-forum.de/forum/viewtopic.php?t=1025923

Probier's mal so:

Code: Select all

eval var3=\$var$zahl
eval sorgt dafür, dass die Shell Variablenersetzungen, Wildcard-Auflösung usw. zweimal an der Zeile vornimmt. Zuerst löst eval eine Bearbeitung seiner Argumente durch die Shell aus. Die ersetzt $zahl durch "1". Das erste $-Zeichen lässt sie als Zeichen an und für sich stehen, da es durch den Backshasl entwerter wurde. Die Zeile sieht also nach der eval-Bearbeitung so aus:

Code: Select all

var3=$var1
Jetzt geht die Shell zum 2. Mal an die Zeile heran, ersetzt $var1 durch "/linux/test" und setzt var3 auf diesen Wert.

OK?

Jochen
Die grösste Lüge der EDV? "Mal eben..."

miki

#5 Post by miki »

super...danke man :shock:

Post Reply