2017-02-21 2 views
0

Ich teste eine einfache Programm-Shell (sh).Shell sh, Syntax while (Bedingung)

Ich verwende While-Schleife, aber es zeigt einen Fehler.

./essai.sh: Zeile 5: Test: Zu viele Argumente

Dies ist der Code:

#!/bin/sh 

numero=1 
max=3 
while test [ $numero -le $max ] 
do 
ping -c 2 127.0.0.1 
numero=$(($numero + 1)) 
printf $numero 
sleep 5 
done 

Antwort

1

Zustand Aussage ist falsch Änderungszustand von

while test [ $numero -le $max ] 

bis

while [ $numero -le $max ] 
+1

Es ist sehr empfindlich auf Leerzeichen ... Ich habe diese Lösung vorher getestet, aber ich habe nicht auf Leerzeichen geachtet. Danke trotzdem, es funktioniert jetzt! –

+0

Oder entfernen Sie einfach die eckigen Klammern: 'während test $ numero -le $ max' – cfromme

+1

Oder verwenden Sie parentheseis und machen den Vergleich natürlicher aussehen:' while ((numero <= max)) '.... OOPS, gerade bemerkt: Wir haben Posix Shell hier, nicht bash. In diesem Fall würde diese Alternative nicht funktionieren. – user1934428

1

Der Test Schlüsselwort muss entfernt werden:

while [ $numero -le $max ] 

Sie wissen auch

for numero in $(seq 1 3) ; do echo $numero ; done 
3

"[]" bedeutet "test", also können Sie diese Zeile zu

ändern

oder

while [ $numero -le $max ] 

BTW: die Leerzeichen zwischen "[]" und Bedingungsausdruck ist notwendig.