2016-08-25 2 views
0

어떤 이유로 인해 첫 번째 if 문 다음에 명령이 실행되지 않습니다. "/usr/local//backup.sh : 수면 : 찾을 수 없음"예를 들어이 ..elif에서 명령을 찾을 수 없음> bash

첫 번째 문은 같이가는 경우 :

if [ "$command" == "start -c" ]; then 
echo -e "${ORANGE}Starting website backup...${E}" 
sleep 1 
DT=`date +%Y-%m-%d` 
echo -e "${ORANGE}Started backup at $DT ${E}" 
sleep 1 
tar -zcvf web-$DT.tar.gz /usr/local/www/nginx 
echo -e "${ORANGE}Compatced files, moving to backup directory${E}" 
sleep 1 
mv web-$DT.tar.gz $PATH/web-$DT.tar.gz 
echo -e "${CYAN}Moved to backups ($PATH/web-$DT.tar.gz)\nDo you want to upload to ftp?${E}\n${CYAN} 'y' or 'n'?${E}" 
read answer 
if [ "$answer" == "y" ]; then 
    echo -e "${ORANGE}Uploading to ftp server...${E}" 
    sleep 1 
    if ftp -in -u ftp://$USER:[email protected]$HOST/Backups/f $PATH/web-$DT.tar.gz; then 
     echo -e "${GREEN}Uploaded! Bye!${E}" 
    else 
     echo -e "${ORANGE}Couldn't upload with ftp command, trying with curl...${E}" 
     sleep 1 
     curl -T "$PATH/web-$DT.tar.gz" -u $USER:$PASS ftp://$HOST/Backups/f/ 
     echo -e "${GREEN}Uploaded! Bye!${E}" 
    fi 
else 
    echo -e "${GREEN}Bye!${E}" 
fi 

모든이 후, 그러나,이 문장 내에서 잘 작동 그것은 단지하지 않는 엘프 연민.

여기에 문제가있는 코드입니다 :

elif [ "$command" == "start -d" ]; then 
echo -e "${ORANGE}Starting database backup...${E}" 
sleep 1 
DT=`date +%Y-%m-%d` 
echo -e "${ORANGE}Started backup at $DT ${E}" 
sleep 1 
umask 177 
echo -e "${ORANGE}Dumping database 'account'\n${E}" 
mysqldump --user=$DBUSER --password=$DBPASS --host=$HOST account > $PATH/account-$DT.sql 
sleep 1 
echo -e "${ORANGE}Dumping database 'game'\n${E}" 
mysqldump --user=$DBUSER --password=$DBPASS --host=$HOST game > $PATH/game-$DT.sql 
sleep 1 
echo -e "${ORANGE}Dumping database 'forum'\n${E}" 
mysqldump --user=$DBUSER --password=$DBPASS --host=$HOST forum > $PATH/forum-$DT.sql 
sleep 1 
echo -e "${CYAN}Moved to backups ($PATH/<database-date>.sql)\nDo you want to upload to ftp?${E}\n${CYAN} 'y' or 'n'?${E}" 
read answer 
if [ "$answer" == "y" ]; then 
    echo -e "${ORANGE}Uploading to ftp server...${E}" 
    sleep 1 
    curl -T "$PATH/account-$DT.sql" -u $USER:$PASS ftp://$HOST/Backups/f/Databases/ 
    curl -T "$PATH/game-$DT.sql" -u $USER:$PASS ftp://$HOST/Backups/f/Databases/ 
    curl -T "$PATH/forum-$DT.sql" -u $USER:$PASS ftp://$HOST/Backups/f/Databases/ 
    sleep 1 
    echo -e "${GREEN}Uploaded! Bye!${E}" 
else 
    echo -e "${GREEN}Bye!${E}" 
fi 

하고 난 그냥 종료 ..

else 
    echo -e "${RED}Sorry! Not found${E}" 
fi 

당신이 거기 경우 문에 공백을 그리고이 모든 것을 볼 수있는 것처럼, 그래서 무슨 문제 이??

위로 가기 #!/bin/bash도 있는데, 모든 변수도 존재합니다.

+0

[도움이 될 수도있는 bash 스크립트] (http://unix.stackexchange.com/q/155551/74329) – Cyrus

+0

set -x를 사용하여 동일한 출력을 얻었습니다 –

답변

3

코드의 어느 시점에서 PATH 변수의 값을 덮어 쓴 것처럼 보입니다. 쉘은 sleep과 같은 프로그램을 어디에서 찾을 수 있는지 알기 위해 변수를 필요로합니다 (따라서 "찾을 수 없음"오류). 경로 변수의 이름을 바꿉니다.

+0

"PATH"는 백업 디렉토리입니다 , bin 디렉토리가 아닙니다 –

+2

@ JoaoPaulo : 아니요, 쉘은 항상 명령 검색 경로로'PATH'를 처리합니다. 백업 디렉토리에'PATH'를 설정하면, Bash는 백업 디렉토리에서 명령을 찾게 될 것이고 아마도 잘되지 않을 것입니다. – jwodder

+2

이 때문에 항상 소문자 변수 이름을 사용해야합니다. –

관련 문제