Первое издание этого вопроса следующим образом:
if [ ! -d "$LOCAL_WORKING_DIR" ]
then
mkdir "$LOCAL_WORKING_DIR"
cd "$LOCAL_WORKING_DIR"
else
cd"$LOCAL_WORKING_DIR" fi
Я ответил: Вы не должны получить ошибку синтаксиса для этого else
. Однако fi
неуместен. Ему либо нужна точка с запятой перед ней, либо она должна быть на линии сама по себе.
if [ ! -d "$LOCAL_WORKING_DIR" ]
then
mkdir "$LOCAL_WORKING_DIR"
cd "$LOCAL_WORKING_DIR"
else
cd "$LOCAL_WORKING_DIR" # Note the space
fi
Однако, вы действительно не нужен пункт else
вообще:
if [ ! -d "$LOCAL_WORKING_DIR" ]
then
mkdir "$LOCAL_WORKING_DIR"
fi
cd "$LOCAL_WORKING_DIR"
Или даже:
mkdir -p "$LOCAL_WORKING_DIR" || exit 1
cd "$LOCAL_WORKING_DIR" || exit 1
Первый exit
берется, если каталог не существует и не может быть создано (например, потому что есть файл с именем, которое вы хотите быть каталогом, или у вас нет разрешения). Так как mkdir
сообщил об ошибке, разумно просто выйти, но вы можете сделать любое другое действие обработки ошибок, которое вам нужно сделать. Второй exit
берется, если вы не можете cd
в каталог - это почти наверняка означает, что у вас нет разрешения, или кому-то удалось удалить его между моментом, когда команда mkdir
проверила, что она существует, и время, когда был выполнен cd
,
Ваш второй пример:
if -f $LOCAL_EVENT_LOG_FTP_TEMP del $LOCAL_EVENT_LOG_FTP_TEMP
else
echo Event Log Backup Module not Activated.
fi;
Вы полностью отсутствует пункт then
и действия для него. Похоже, вы планируете протестировать файл и затем удалить его, но del
- это команда Windows (а не стандартная команда Unix), и вам нужно использовать команду test (встроенная командная оболочка).
if [ -f $LOCAL_EVENT_LOG_FTP_TEMP ]
then del $LOCAL_EVENT_LOG_FTP_TEMP
else echo Event Log Backup Module not Activated.
fi
Помните, [
это имя команды; он должен быть отделен от if
пробелами и должен быть отделен от его аргументов пробелами, а последний аргумент должен быть ]
, когда вы используете имя [
(но не тогда, когда вы используете вместо него имя test
).
- ваше ключевое слово 'fi' в той же строке, что и' cd '$ LOCAL_WORKING_DIR "' – Dale
Dale: nope :) typo. – Erynne
Это было; это не сейчас. –