2015-05-12 3 views
0
CorrectInstance=DEV 
Instance_Name=DEV 
if [ $Instance_Name == $CorrectInstance ] 
then 
    echo "Instance validated sucessfully" 
else 
    echo "Instance validation failed. Script exited." 
    exit 
fi 

Когда я бегу над скриптом, я становлюсь ниже ошибки.ошибка синтаксиса в строке 10: `fi 'неожиданный

Match.sh[3]: ^M: not found [No such file or directory] 
Match.sh: line 3: syntax error at line 10: `fi' unexpected 

Пожалуйста sugeest

+0

Не связанный с непосредственной проблемой, это должно быть '[" $ Instance_name "=" $ CorrectInstance "]'. То есть '=', а не '==' (поскольку последний является расширением, не определенным стандартом POSIX sh) и цитирует все расширения (так что пробелы, символы глобуса и т. Д. Внутри вашей тестовой команды могут " t нарушит его синтаксис). Эти проблемы можно найти автоматически http://shellcheck.net/ –

ответ

10

^M также \r Так, вероятно, вы имели это в системе Windows, в какой-то момент и редактировал его там, где конец последовательности линии является \r\n. Попробуйте запустить dos2unix, если у вас есть это, иначе вы можете использовать инструмент, например sed, для удаления пробелов с концов линий.

0

В зависимости от unix, я думаю, что «==» неверно.
Предполагается, что это один знак равенства. Обратите внимание на пробелы вокруг знака равенства.
Если вы запустите его без этих пространств, он может назначить переменную и вернуть true вместо запуска любого теста.

Поместите переменные в кавычки. Таким образом, если они отсутствуют, у вас есть "" вместо синтаксической ошибки.

И я использую эти {} только по привычке.

Если у меня есть $ XY = STUFF

печати $ {XY} 123 stuff123 вывели следующую

печати $ XY123 ничего не возвращает, потому что переменные $ XY123 не определены.

Повторное использование вашей бомбардировочной линии 3.
if ["$ {Instance_Name}" = "$ {CorrectInstance}"]; затем

blah blah blah