shell scripting – несколько тестов равенства в одном выражении if

Поэтому я создаю скрипт, и он отлично работает, за исключением того, что в конце, когда я печатаю напиток, он выполняет линию, которую он не допускает. Последняя строка только предположительно подходит, когда я набираю «нет» или «нет» … Что я сделал неправильно?

echo -n "Are you thirsty?" read th if [ "$th" = "yes" ] || [ "Yes" ]; then echo "What would you like to drink?" read th fi if [ "$th" = "water" ]; then echo "Clear crisp and refreshing." elif [ "$th" = "beer" ]; then echo "Let me see some ID." elif [ "$th" = "wine" ]; then echo "One box or Two?" else echo "Coming right up." fi if [ "$th" = "no" ] || [ "No" ]; then echo "Come back when you are thirsty." fi 

3 Solutions collect form web for “shell scripting – несколько тестов равенства в одном выражении if”

Ваша проблема в том, что [ "Yes" ] и [ "No" ] эквивалентны [ -n "Yes" ] и [ -n "No" ] и поэтому всегда оценивают значение true.

Правильный синтаксис:

 if [ "$th" = "yes" ] || [ "$th" = "Yes" ]; then ... if [ "$th" = "no" ] || [ "$th" = "No" ]; then 

Или:

 if [ "$th" = "yes" -o "$th" = "Yes" ]; then ... if [ "$th" = "no" -o "$th" = "No" ]; then 

Или, если вы используете bash в качестве интерпретатора оболочки Bourne:

 if [ "${th,,}" = "yes" ]; then ... if [ "${th,,}" = "no" ]; then 

( ${th,,} заменяется значением нижнего регистра переменной th )

Ваши тесты не делают то, что вы думаете, что они делают.

 if [ "$var" = "value" ] || [ "Value" ]; 

Это не делает два теста равенства. Он проверяет первый случай, а затем, если это не удается, проверяет, существует ли "Value" , что он делает, потому что он там проверяется. Таким образом, он всегда проходил к тому, что соответствовало if . Вы, вероятно, хотите:

 if [ "$var" = value" ] || [ "$var" = "Value" ] 

Лучше еще может заглянуть в case..esac .

 case "$var" in value|Value) do_stuff ;; other|Other) do_something_else ;; esac 

(1) Когда вы проверяете [ "Yes" ] а затем на [ "No" ] , вам нужно сравнить его против th в обеих частях:

[ "$th" = "yes" ] || [ "$th" = "Yes" ]

а также

[ "$th" = "no" ] || [ "$th" = "No" ]

(2) Для раздела, if [ "$th" = "yes" ] || [ "$th" = "Yes" ]; if [ "$th" = "yes" ] || [ "$th" = "Yes" ]; , вам необходимо расширить этот блок кода, чтобы включить все до теста для « No и использовать elif в этот момент, чтобы объединить его как один более сложный оператор if-elif-fi .

Здесь это касается исправлений, упомянутых выше:

 echo -n «Вы жаждете?»
 читать

 если ["$ th" = "yes"] ||  ["$ th" = "Да"];  тогда

     echo «Что бы вы хотели выпить?»
     читать

     если ["$ th" = "water"];  тогда
       эхо «Четкое четкое и освежающее».
     elif ["$ th" = "пиво"];  тогда
       echo «Позвольте мне увидеть ID».
     elif ["$ th" = "wine"];  тогда
       эхо «Одна коробка или две?»
     еще
       echo «Приближается».
     фи

 elif ["$ th" = "no"] ||  ["$ th" = "Нет"];  тогда
     эхо «Вернись, когда тебе хочется пить».
 фи
  • Как узнать, существует ли каталог?
  • awk системный вызов с инвертированным эффектом
  • Невозможно сравнить результат lsb_release с строкой в ​​Bash
  • Множественный оператор, который включает специальные символы, используя при возникновении ошибок
  • Как сравнить версию программы в сценарии оболочки?
  • Как сравнить строки в ksh
  • Использование -n и -z в тестировании встроено - Bash
  • Если условие не работает в скрипте над ssh
  • Как использовать отрицание команды в цикле while с grep в сценарии оболочки?
  • Interesting Posts

    Почему чтение и запись в фреймбуфер не показывают эффекта?

    Как использовать инструменты linux для проверки подлинности сайта

    Как включить аутентификацию без пароля на удаленном сервере в качестве другого пользователя?

    Нет Wi-Fi – Fedora 25 на Dell Latitude E5500

    crontab не работает для Fedora 23

    Красный и синий переключаются на xfce

    Почему моя команда xmodmap не запускается при запуске / входе?

    Невозможно создать загрузочный USB для PCBSD

    Что такое PKGBUILD и нужно ли его редактировать при установке пакетов?

    Выполнение некоторых частей скрипта как непривилегированного пользователя с оболочкой

    Восстановить исходную строку.h после случайной перезаписи

    Как размножить файл данных с другим файлом данных индекса?

    Есть ли способ показать предыдущие сообщения на экране?

    Как я буду строить маршрутизатор на основе Linux?

    Что означает отпечаток пальца RSA для пересылаемого порта?

    Linux и Unix - лучшая ОС в мире.