В сценарии bash, используя условное выражение «или» в выражении «if»

Этот вопрос является продолжением моего предыдущего вопроса . Пользователи на этом сайте любезно помогли мне определить, как написать bash for цикла, который итерации над строковыми значениями. Например, предположим, что переменная управления петлями fname выполняет "a.txt" "b.txt" "c.txt" по строкам "a.txt" "b.txt" "c.txt" . Я хотел бы echo «да!». когда fname имеет значение "a.txt" или "c.txt" , а echo «no!» в противном случае. Я пробовал следующий сценарий оболочки bash:

 #!/bin/bash for fname in "a.txt" "b.txt" "c.txt" do echo $fname if [ "$fname" = "a.txt" ] | [ "$fname" = "c.txt" ]; then echo "yes!" else echo "no!" fi done 

Я получаю вывод:

  • Как запустить «find -exec <script> {} \;
  • Запрос терминала отображается поверх
  • Перезапуск службы из сценария
  • Помните «локальную» историю bash в папке?
  • Как я могу распространять свой ключ SSH pub в список серверов без необходимости вводить мой пароль снова и снова?
  • Что это за синтаксис Bash: someVariable = someValue
  • a.txt

    нет!

    b.txt

    нет!

    c.txt

    да!

    Почему оператор if видимому, дает true, когда fname имеет значение "a.txt" ? Я использовал | неправильно?

  • Скрипт для проверки состояния ntp и синхронизации времени системы
  • Как эффективно выполнить время выполнения скрипта?
  • Bash: помогает оттачивать пользовательскую функцию
  • Скрипт для чтения строки за строкой из файла, который передается другой команде и выводится в другой файл
  • Меню KSH, основанное на тексте, с использованием STDERR
  • линии с уникальной контрольной суммой
  • One Solution collect form web for “В сценарии bash, используя условное выражение «или» в выражении «if»”

    Если вы хотите сказать OR использовать двойную трубку ( || ).

     if [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ] 

    (Исходный OP-код с использованием | просто соединял выход левой стороны с правой стороны, точно так же, как работает любая обычная труба.)

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