Почему я получаю правильные результаты и ошибку в этом сценарии 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 

  • Почему это сравнение не равно?
  • Передача значений в скрипт
  • Сравнение значений в одной строке
  • Как удалить файлы с пробелами в них в сценарии bash?
  • Повторное назначение (в частности, увеличение) переменной в сценарии bash
  • Используя $? в выражении if
  • Как переместить файл, если имя папки содержит имя файла
  • Как загрузить последний файл с сервера SFTP?
  • 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" ]; 

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

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