2013-12-16 4 views
0

Что в этом плохого?RHEL 6.3 shell scripting

if [ ! -d "$LOCAL_WORKING_DIR" ] 
then  
    mkdir "$LOCAL_WORKING_DIR" 
    cd "$LOCAL_WORKING_DIR" 
else 
    cd"$LOCAL_WORKING_DIR" 
fi 

ошибки: ошибка синтаксиса около неожиданной лексемы 'еще'

А что ??

if -f $LOCAL_EVENT_LOG_FTP_TEMP del $LOCAL_EVENT_LOG_FTP_TEMP 

else 
    echo Event Log Backup Module not Activated. 
fi; 

Есть ли ошибки?

+1

- ваше ключевое слово 'fi' в той же строке, что и' cd '$ LOCAL_WORKING_DIR "' – Dale

+0

Dale: nope :) typo. – Erynne

+0

Это было; это не сейчас. –

ответ

0

Первое издание этого вопроса следующим образом:

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).

+0

Почему не нужно Else ?? Я даже не понимаю, что происходит с последовательностями в RHEL .. – Erynne

+0

Потому что 'then' и' else' do 'cd '$ LOCAL_WORKING_DIR", поэтому вам нужно только написать один раз, после 'if ... fi' как показано. –

+0

Ohhh okay :)^_ ^ – Erynne