2015-11-19 87 views
0

我想創建一個腳本,它需要兩個參數,源文件夾和目標文件夾。如果找不到源目錄並退出程序,我試圖顯示一條錯誤消息。如果沒有找到目標目錄,我希望它創建該目錄。然後我想將源目錄中的所有內容複製到目標目錄。努力在Linux中的shell腳本

當我運行帶有兩個參數傳遞的程序,例如到/ mnt/sdb1的和-root /我的文檔/ photoarch,我會得到錯誤:

CP:不能STAT '到/ mnt/adb1 /':沒有這樣的文件或目錄

我會把它想顯示我的錯誤,我編碼並創建文件夾,如果尚未創建,但它不會這樣做。

感謝

#!/bin/sh 
clear 
#checking that arguments exist 
if [ $# -eq 0 ]; then 
    echo "Usage: phar image_path archive_path" 
elif [ -d $1 ]; then 
    echo "Source directory not found" 
    exit 
elif [ -d $2 ]; then 
    mkdir ~root/my-documents/$2 
else 
    cp -r $1 $2 
fi 

回答

2

你缺少否定:

elif [ ! -d $1 ]; then 
... 
elif [ ! -d $2 ]; then 

作爲最佳實踐的建議,我建議你附上的$1$2所有出現的雙引號。否則,您可能會遇到包含空格的路徑問題。例如:

cp -r "$1" "$2" 
0

在第三elif條款,你使目標目錄,如果它不存在,但你把它創建爲根的主目錄下的子目錄,然後嘗試複製到不存在的你剛剛驗證的目錄不存在(一旦你像@Stefan Majewsky注意到的那樣反轉標誌)。如果您打算將目標目錄創建爲根目錄的子目錄(或其他任何地方),那麼我建議您在某種程度上重構您的代碼以設置變量,如SRCDIR和DSTDIR,以便您可以更輕鬆地操作它們他們需要改變。有了這個,你可以看到這樣的代碼:

#!/bin/sh 
clear 
#checking that arguments exist 
if [ $# -eq 0 ]; then 
    echo "Usage: phar image_path archive_path" 
    exit 1 
fi 
SRCDIR="$1" 
DSTDIR="$2" 

if [ ! -d $SRCDIR ]; then 
    echo "Source directory not found" 
    exit 
elif [ ! -d $DSTDIR ]; then 
    DSTDIR="~root/my-documents/$DSTDIR" 
    echo "Creating destination directory $DSTDIR" 
    mkdir $DSTDIR 
fi 

cp -r "$SRCDIR/*" "$DSTDIR" 

我希望這能夠充分回答你的問題。