Написание цикла do while в bash с несколькими условиями - PullRequest
0 голосов
/ 07 октября 2019

У меня возникли проблемы с написанием цикла do-while в bash с несколькими условиями.

Мой код в настоящее время работает, когда он выглядит следующим образом:

    while
    count=$((count+1))
    ( MyFunction $arg1 $arg2 -eq 1 )
    do
       :
    done

Но я хочудобавить второе условие в цикл «do-while» следующим образом:

    while
    count=$((count+1))
    ( MyFunction $arg1 $arg2 -eq 1 ) || ( $count -lt 20 )
    do
       :
    done

Когда я это делаю, я получаю сообщение «ошибка команды не найдена».

Я пытался несколькоиз примеров цикла while из этого поста, но не повезло, и пример do-while, который я использую, взят из здесь . В частности ответ с 137 лайками.

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

( является частью синтаксиса, а $count не является допустимой командой. test или [ является допустимой командой, используемой для «проверки» выражений.

while
   count=$((count+1))
   [ "$(MyFunction "$arg1" "$arg2")" -eq 1 ] || [ "$count" -lt 20 ]
do
   :
done

В упомянутом вами ответе используются арифметические выражения с (( (не один (, нодвойной (( без каких-либо промежуточных значений). Вы также можете сделать:

while
   count=$((count+1))
   (( "$(MyFunction "$arg1" "$arg2")" == 1 || count < 20 ))
do
   :
done
0 голосов
/ 07 октября 2019

Вы можете использовать for цикл:

for ((count=0; i<20 && $(MyFunction $arg1 $arg2) == 1; count++)); do
   echo $count
done
...