2017-02-21 14 views
0

Я тестирую простую оболочку программы (sh).Shell sh, синтаксис while (состояние)

Я использую цикл while, но он показывает ошибку.

./essai.sh: строка 5: тест: слишком много аргументов

Это код:

#!/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 

ответ

1

Состояние утверждение неверно условие изменения от

while test [ $numero -le $max ] 

до

while [ $numero -le $max ] 
+1

Он очень чувствителен к пространствам ... Я тестировал это решение раньше, но я не обращал внимания на пробелы. Спасибо, в любом случае, он работает сейчас! –

+0

Или просто удалите квадратные скобки: 'while test $ numero -le $ max' – cfromme

+1

Или используйте parentheseis и сделайте сравнение более естественным:' while ((numero <= max)) '.... OOPS, только что заметили: У нас есть Posix Shell, а не bash. В этом случае эта альтернатива не сработает. – user1934428

1

Испытание ключевое слово должно быть удалено:

while [ $numero -le $max ] 

Вы знаете также

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

"[]" означает "тест", Таким образом, вы можете изменить эту строку в

while test $numero -le $max 

или

while [ $numero -le $max ] 

BTW: необходимы промежутки между «[]» и условным выражением.

Смежные вопросы