PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash - Prüfen ob Befehl erfolgreich war



kaptain iglo
12-11-2008, 12:45
Hi, ich versuche mich gerade an meinem ersten Bashscript.

Ich möchte gerne einen Befehl ausführen.

( /bin/mt -f /devnst0 rewind)

Jetzt soll mein Script eine Erfolgsmeldung ausgeben.

Was ich gefunden habe ist die $?.
Hier wird eine Meldung über Exitstatus gemacht.

Wenn ich jetzt

if [$? = 0]; then
echo ....

mache bekomme ich eine Fehlermeldung.
Was ist hier falsch????

jeebee
12-11-2008, 16:11
Was für eine Fehlermeldung, poste doch die auch. Grundsätzlich sollte es so gehen. Das fi am Schluss des if-Blocks hast du?
if [ $? = 0 ]; then
echo "Success"
fi läuft bei mir ohne Probleme.

PS: eigentlich solltest du für Integer-Vergleiche mit test -eq verwenden. = vergleicht Strings, funktioniert aber hier auch. Siehe auch man test.

HTH jeebee

meinereinerseiner
13-11-2008, 07:40
if [$? = 0]; then
echo ....


da fehlen nur leerzeichen:

if [ $? = 0 ]; then
echo 123
fi

oder aber es geht auch mit:

/bin/bla && echo "alles ok"

tom

jeebee
13-11-2008, 09:15
Oh, hab ich gar nicht gesehen :o

Darum: für Code gibts die [code]-Tags

kaptain iglo
13-11-2008, 13:31
Yo, die Leerzeichen waren das Problem.
Warum ist das so?


if [ $? = 0 ]; then geht


if[ $? = 0]; then geht nicht.

Viele Dank und viele Grüße
Ahoi

ContainerDriver
13-11-2008, 15:40
[ ist ein Programm (könnte z.B. ein Link auf test sein) oder ein Shell-Built-In, bei deinem Aufruf von [ sind $?, =, 0 und ] die Parameter. Wenn du die 0 direkt an den Parameter ] schreibst, dann wird das als nur ein Parameter gewertet und dem Programm-/Funktionsaufruf fehlt ein Parameter und zusätzlich übergibst du [ auch noch einen ungültigen Parameter.
Bei if[ versteht der Shell-Interpreter vermutlich gar nicht, was du von ihm willst, bzw. könnte er if[ als Programmaufruf interpretieren. Wenn du "if " schreibst, dann erkennt der Interpreter das als Sprachkonstrukt.

kaptain iglo
15-11-2008, 22:01
Ok. Danke für die Info.

Ahoi!

panzi
17-11-2008, 23:40
Du kannst auch das schreiben:


if /bin/mt -f /devnst0 rewind; then
...
fi