Как я могу объединить эти &&, если условия в Bash? - PullRequest
0 голосов
/ 29 сентября 2019

Я хочу написать bash-скрипт, который принимает оценки по 5 предметам, а оценки не могут превышать 100. Как можно избежать ввода -le 100 каждый раз.

while true
do
echo "enter marks of 5 subjects"
read m1 m2 m3 m4 m5
if [ $m1 -le 100 ] && [ $m2 -le 100 ] && [ $m3 -le 100 ] && [ $m4 -le 100 ] && [ $m5 -le 100 ]
then
        break
else
 echo "marks cannot be more than 100"
fi
done

1 Ответ

2 голосов
/ 29 сентября 2019

Как можно избежать ввода -le 100 каждый раз.

Ну, вы можете ввести что-то еще:

test_lower_equal_100() { [ "$1" -le 100 ]; }
if test_lower_equal_100 "$m1" && test_lower_equal_100 "$m2" && test_lower_equal_100 "$m3" && test_lower_equal_100 "$m4" && test_lower_equal_100 "$m5"

Вы можете перебирать имена переменных:

for i in m1 m2 m3 m4 m5; do
    if [ "${!i}" -le 100 ]; then
         echo "mark $i is lower or equal to 100"
    fi
done

или зацикливание значений:

for i in "$m1" "$m2" "$m3" "$m4" "$m5"; do
   if [ "$i" -le 100 ]; then
         echo "value $i is lower or equal to 100"
   fi
done

Я бы оставил код таким, какой он есть, так как он является и многословным, и читаемым, и обслуживаемым.Я бы процитировал переменные, добавил -r к read и использовал арифметическое расширение bash if ((m1 <= 100 && m2 <= 100 && m3 <= 100 && m4 <= 100 && m5 <= 100)); then.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...