ubuntuusers.de

IF-Bedingung im Skript .sh

Status: Gelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

Laxhund

Anmeldungsdatum:
9. Oktober 2020

Beiträge: Zähle...

Hallo zusammen,

ich habe vor ein .sh-Skript zu schreiben. Dieses soll eine IF-Bedingung enthalten, die wie folgt aussieht.

if [&counter -eq 3]; then
     echo "Text"
     exit
fi

Die If-Bedingung ist in einer While-Schleife und der Counter wird ebenfalls in der While-Schleife erhöht. Ist die Schleife 3 mal durchgelaufen, soll das Programm beendet werden. Dies ist nur ein Test für ein weiteres Programm, deshalb kommt eine for-Schleife nicht in Frage.

Nun habe ich das Problem, dass ich folgende Fehlermeldung beim ausführen bekomme:

test.sh: line 16: [1: command not found

Kann mir jemand sagen, wo der Fehler bei der IF-Bedingung liegt?

Vielen Dank

LG Laxhund

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9787

Wohnort: Münster

Laxhund schrieb:

[…]

if [&counter -eq 3]; then
  1. Was ist mit &counter gemeint?

  2. Auf jeden Fall muss das Kommando [ vom Argument getrennt werden. Wahrscheinlich meinst Du:

    if [ $counter -eq 3 ] 

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4696

Wohnort: Berlin

@Laxhund: Bitte Code zeigen der zu der Fehlermeldung passt, oder verraten mit welcher Shell Du das versucht hast auszuführen. Bei der Bash bekomme ich:

./test.sh: line 5: [: missing `]'
./test.sh: line 5: counter: command not found

Und die Dash sagt:

./test.sh: 5: ./test.sh: counter: not found
./test.sh: 5: [: missing ]

Grundsätzlich ist [ ein alias für das Test-Programm, also das gleiche wie test&counter -eq 3]. Da sieht man schon, dass das problematisch aussieht so ohne Leerzeichen nach dem Programmnamen (auch wenn das hier wegen einem anderen Fehlers noch nicht das Problem ist). Das & ist da falsch, da hast Du im tatsächlichen Code sicher das korrekte $ stehen.

Wenn man den Fehler korrigiert, steht da [$counter -eq 3]. Das erste Wort nach dem aufteilen ist [$counter und wenn die Variable den Wert 1 hat, dann wird das zu [1 und insgesamt [1 -eq 3]. Das versucht die Shell nun auszuführen: das Programm [1 mit den beiden Argumenten -eq und 3]. Und die Fehlermeldung sagt, dass es das Programm [1 nicht gibt. Das $counter bzw. der Wert davon muss das erste Argumen vom [-Programm sein, das heisst da muss ein Leerzeichen dazwischen: [ $counter -eq 3]. Testlauf:

./test.sh: 5: [: missing ]

Im Grunde das gleiche Problem. Das [-Programm erwartet als letztes Argumen ein ]. Es wird aber mit 3] als letztes Argument aufgerufen. Da muss auch wieder ein Leerzeichen hin, damit die 3 und das ] separate Argumente sind. Ergebnis:

1
2
3
4
if [ $counter -eq 3 ]; then
     echo "Text"
     exit
fi

koelner

Avatar von koelner

Anmeldungsdatum:
22. Juni 2006

Beiträge: 307

Wohnort: Zweibrücken

Laxhund schrieb:

Nun habe ich das Problem, dass ich folgende Fehlermeldung beim ausführen bekomme:

test.sh: line 16: [1: command not found

Kann mir jemand sagen, wo der Fehler bei der IF-Bedingung liegt?

Ohne zu wissen was in Zeile 16 steht...sehr schwierig. Ansonsten würde ich für den Text von echo '<text>' benutzen.

koelner

Laxhund

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2020

Beiträge: 2

Vielen Dank für die schnellen Antworten.

Es lag tatsächlich an den fehlenden Leerzeichen.

Heute ist Freitag, Laxhund ☺

Antworten |