if [ ... ];
echo "in downtime, exit";
then exit
fi
Как упоминается в других ответах, ключевое слово then
находится не в том месте в этом if
условии. (С точки зрения языка оболочки это не отсутствует. Если бы это было так, это было бы синтаксической ошибкой.)
Здесь происходит то, что обе команды перед , затем
принимаются как часть условия, а возвращаемое значение всего лота используется для выбора того, выполняется ли часть после , а затем
. Если команды разделены точкой с запятой, имеет значение только статус выхода последней команды.
Поскольку echo
, вероятно, всегда будет успешным, условная ветвь выполняется всегда. Что-то вроде , если правда; ложный; затем повторите что-нибудь; Однако fi
никогда не запустит echo
.Я бы предложил поместить ключевое слово then
в ту же строку, что и условие, чтобы случайно не добавить что-то между ними.
С if
использование нескольких команд в условии, скорее всего, просто сбивает с толку, но с while
это может иметь свое применение: у нас может быть что-то вроде этого:
while value=$(somecommand) ; [ "$value" != 0 ] ; do
echo "do some work with $value"
done
И назначение, и тест выполняются на каждой итерации цикла.
Разница между
PATH="/some/new/bin" # wrong (in your case)
и
PATH="$PATH:/some/new/bin" # correct (in your case)
заключается в том, что первый заменяетзначение переменной PATH
, а второй добавляет к значение той же переменной.
Строка в вашем файле должна была гласить
export PATH="$PATH:/Applications/Postgres.app/Contents/Versions/9.6/bin"
Обратите внимание, что $PATH
должен быть :
-разделенный список каталогов. Имена отдельных двоичных файлов здесь перечислять не должны, только имена (пути) каталогов, где оболочка должна их искать.
Обычно не нужно экспортировать
PATH
, так как он уже экспортирован.
Если значение, которое вы добавляете к PATH
, является правильнымили нет, я не знаю.