Почему я получаю правильные результаты и ошибку в этом сценарии bash?

Я новичок в написании сценариев bash и изучении «если тогда». Когда я запускаю простой скрипт ниже, он выполняет и дает мне правильный результат, но я все равно получаю сообщение об ошибке. Имя скрипта – testcript.sh. Ошибка следующая: «./testscript: строка 5: [csh: команда не найдена]»

Может кто-нибудь сказать, что это значит?

#! /bin/bash MY_SHELL="csh" If ["$MY_SHELL" = "bash" then echo "You seem to like the bash shell." else Then "You don't seem to like the bash shell." fi 

2 Solutions collect form web for “Почему я получаю правильные результаты и ошибку в этом сценарии bash?”

Давайте рассмотрим эту строку за строкой:

 #! /bin/bash MY_SHELL="csh" 

Все идет нормально.

 If ["$MY_SHELL" = "bash" 

Теперь эта строка имеет ряд ошибок:

  1. if и not If – shell – это случай senstive, поэтому foo и FOO различаются
  2. Должно быть пробел после символа
  3. Вам понадобится ] в конце теста с предыдущим пространством.

Это означает, что строка должна больше понравиться, if [ "$MY_SHELL" = "bash" ]

 then echo "You seem to like the bash shell." else 

Они хороши

  Then "You don't seem to like the bash shell." 

Вы хотите echo здесь. Помните о чувствительности к регистру.

 fi 

Результат:

 #! /bin/bash MY_SHELL="csh" if [ "$MY_SHELL" = "bash" ] then echo "You seem to like the bash shell." else echo "You don't seem to like the bash shell." fi 

Изменить: как только вы становитесь более комфортно с помощью сценариев оболочки, https://www.shellcheck.net/ – полезный сайт для проверки подлинности. Выход ошибки не всегда ясен, но обычно это полезно для указания ошибок!

Вам понадобится пробел после [ и до ] поскольку скобки на самом деле являются командами! Так:

 if [ "$shell" = "bash" ]; 

Есть и другие ошибки, которые я не указывал, так как это тот, который вы просили.

  • Математические операции с входными данными и печатью?
  • Аргументы сценария Bash не передаются функции?
  • Что делает «sudo chown -R hadoop: hadoop hadoop»?
  • простой сценарий цикла для построения подсети ipv6
  • Сохранить кешированное видео на firefox?
  • Использование последовательных имен переменных в скрипте
  • Могу ли я управлять графической программой из командной строки?
  • Объединить документ PDF, но с условиями
  • Может кто-нибудь объяснить эту строку кода / команды, пожалуйста?
  • Как использовать необязательный аргумент?
  • Элементы списка с пробелами в zsh
  • Как установить пары фиксированного значения, вертикально ориентированные пары ключ-значение в файле CSV?
  • Interesting Posts

    что означает @ в ls -l?

    Воспроизведите переключатель «–max-depth =» для команды использования диска в AIX

    захват сигналов внутри команд группировки

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

    Как использовать cp -u в системе Solaris, которая не поддерживает параметр -u?

    Сохранение первого экземпляра дубликатов

    изменить формат даты / времени с ггггммдд ччмммсс на дд / мм / гггг чч: мм: сс

    Как сравнить все файлы в каталоге с другим файлом и распечатать выходные данные общих строк

    Как узнать, какое приложение отключает сон?

    Как исключить список полных путей каталога в команде find в Solaris

    Низкоконтрастная цветовая схема в файле конфигурации xxxterm?

    Что означает '-size +0' в команде 'test'

    Запуск элементарной ОС на MacBookPro10,1, получение случайных изменений разрешения

    Как монтировать Clonezilla img для извлечения файлов?

    Передача данных в stdin процесса без возникновения EOF впоследствии

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