Вопрос не в том, что вы на самом деле спросили, но ... Вы сказали пользователю ввести «да» или «нет», но только тест для y или n - конечно, вы дали им подсказку, но пользователи стали настойчивыми. Так что, может быть, более свободный тест в порядке:
echo "Please enter yes or no (y/n)"
read string
case "$string" in
[yY]* | [nN]*) echo "User entered $string" ;;
*) echo "I don't understand '$string'" ;;
esac
Это будет распознавать любые изменения, которые начинаются с Y или N - обычно это достаточно хорошо, но вы можете подтянуть испытания. Кроме того, так как вы, вероятно, хотите сделать что-то другое с да или нет ответа вы можете расширить дело (я также ужесточила тесты в этом один):
case "$string" in
[yY] | [yY][eE][sS]) echo "Here's where you process yes" ;;
[nN] | [nN][oO]) echo "And here you deal with no" ;;
*) echo "I don't understand '$string'" ;;
esac
Вы могли бы сделать это с помощью если заявления но я нахожу, что этот случай более читабельен, когда возможны более двух альтернатив, и тест подходит для синтаксиса случая.
'if [" $ string "=" y "-o" $ string "=" n "]' – Erik
@Erik Опубликовать это как ответ. – Barmar
@Erik Пожалуйста, напишите как ответ, чтобы я мог отметить его как решенный. – bsmoo