Так практически для моего присвоения я должен убежать из истинного цикла с условием продолжения, когда вводы данных пользователем число, которое дает остаток модуля от 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
Переместитесь 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
Это работает на меня согласно подсказкам @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
Править: Вы изменили вопрос. Этот ответ соответствует предыдущей версии вопроса. (Мне, не ясно, если Вы хотите повредить цикл, когда нет никакого остатка или когда существует остаток.)
Так как это 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"
$