Поймать неожиданный ввод одиночного символа в bash
У меня есть сценарий bash, который в какой-то момент запрашивает у пользователя подтверждение. Я делаю это, читая один символ, который затем преобразуется в нижний регистр и проверяется, является ли это «y». Если нет, сценарий завершается.
Теперь, если я просто нажимаю Enter на вводном чтении, я получаю error: unary operator expected
. Как я могу предотвратить эту проблему или поймать ошибку?
- Некоторые ошибки возникли, когда я установил lucene, модуль perl!
- Если условие не работает в скрипте над ssh
- чтобы проверить, действительно ли ввод действителен для ввода программ C
- shell scripting - несколько тестов равенства в одном выражении if
- `test` и` [`- разные бинарные файлы, любая разница?
Фрагмент кода:
echo -ne "Confirm [y/n]: " read -n1 uc if [ ${uc,,} != "y" ] then exit 0 fi
- Как сделать вывод для grep неудачным?
- Что означает '-size +0' в команде 'test'
- Использование -n и -z в тестировании встроено - Bash
- Как я могу использовать команды bash, если тесты и найти команды вместе?
- Невозможно сравнить результат lsb_release с строкой в Bash
- Правильное литье типов в сценарии оболочки для использования с циклом while и модулем
- Bash - ожидаемое целочисленное выражение
- Как проверить, есть ли «другие» разрешения в домашних каталогах
One Solution collect form web for “Поймать неожиданный ввод одиночного символа в bash”
Это заявление должно работать должным образом:
if [ "${uc,,}" != "y" ]
Объяснение: Когда uc
пуст, ваш тест расширяется оболочкой следующим образом:
if [ != "y" ]
в то время как с кавычками это
if [ "" != "y" ]
Правило большого пальца: всегда используйте кавычки вокруг переменных оболочки, которые содержат строки при их расширении; они могут содержать пробелы или быть пустыми, что при некотировании часто путает команду, которую они передают (слишком много или отсутствующих параметров).
- Убивание предыдущих экземпляров скрипта перед запуском того же сценария Unix
- sed – шаблон только на некоторых предопределенных строках