Как я выхожу из цикла с условием продолжения Bash с помощью оператора модуля?

Так практически для моего присвоения я должен убежать из истинного цикла с условием продолжения, когда вводы данных пользователем число, которое дает остаток модуля от 0, исключая: (25% 5 = 0 циклов повреждения), Где в моей попытке ниже я пошел не так, как надо?

while true
do
    echo "Please input anything here: "
    read INPUT

    if [ `expr $INPUT % 5` -eq 0 ]; then
        echo "you entered wrong"
    else
        echo "you entered right"
        break
fi
done
4
задан 2 April 2019 в 12:09

3 ответа

Переместитесь break от else часть к if часть:

#!/bin/bash

while true
do
    echo "Please input anything here: "
    read INPUT

    if [ `expr $INPUT % 5` -eq 0 ]; then
        echo "you entered wrong"
        break
    else
        echo "you entered right"
    fi
done
7
ответ дан 23 November 2019 в 11:36

Это работает на меня согласно подсказкам @steeldriver,

  • удостоверьтесь, что Вы используете bash

    #!/bin/bash
    
  • используйте синтаксис удара для арифметической оценки

    ((...))
    

Иначе сценарий оболочки может остаться тем же,

#!/bin/bash

while true
do
    echo "Please input anything here: "
    read INPUT

    if (( INPUT % 5 == 0 )) ; then
        echo "you entered right"
        break
    else
        echo "you entered wrong"
    fi
done

Править: Вы изменили вопрос. Этот ответ соответствует предыдущей версии вопроса. (Мне, не ясно, если Вы хотите повредить цикл, когда нет никакого остатка или когда существует остаток.)

5
ответ дан 23 November 2019 в 11:36

Так как это bash сценарий, о котором мы говорим, можно хотеть использовать read -p и арифметическая оценка ((...))

$ while read -p "Enter number:" input ; do (( input%5 == 0 )) && { echo "Wrong"; break;} || echo "alright"; done
Enter number:11
alright
Enter number:7
alright
Enter number:10
Wrong

Портативно, Вы могли бы хотеть использовать [ иначе test

$ [ $((25%5)) -eq 0 ]  && echo "Zero"
Zero
$ [ $((26%5)) -eq 0 ]  && echo "Zero"
$
4
ответ дан 23 November 2019 в 11:36

Другие вопросы по тегам:

Похожие вопросы: