Вместо использованияif
-утверждений:
#!/bin/bash
while IFS= read -r -p 'Enter number 1-100: '
do
case $REPLY in
-1)
break
;;
[1-9]|[1-9][0-9]|100)
sum=$(( sum + REPLY ))
nums=$(( nums + 1 ))
;;
*)
printf '%s is not a valid input\n' "$REPLY" >&2
esac
done
printf '\n'
printf 'Sum of %d numbers is %d\n' "$nums" "$sum"
printf 'Avg of %d numbers is %d\n' "$nums" "$(( sum/nums ))"
При этом используется шаблон [1-9]|[1-9][0-9]|100
для сопоставления допустимых входных (чисел 1 -9, 10 -99 и 100 ). Это также позволяет пользователю выйти из цикла, нажав Ctrl+D , что обычно используется для обозначения окончания ввода.
Я смог решить эту проблему с помощью приведенного выше комментария. Проблема заключалась в том, что я установил WSL2, но настроил Ubuntu как WSL1. Я смог успешно запустить xeyes (и пройти все соответствующие дымовые тесты ), когда вернулся к WSL1 и добавил
export DISPLAY=:0.0
export LIBGL_ALWAYS_INDIRECT=1
от до~/bash.rc