2010-11-23 160 views
0

那麼,我目前是新手shell腳本。我有其他編程語言的基本知識,例如HTML,JScript,VB.NET和C++的Javascript。 (C++沒有那麼多,只是把腳浸入水中)。最近,我最近的項目一直在嘗試儘可能多地學習Bash shell腳本。目前的問題是瞭解狀態錯誤代碼,以及檢查某些參數是否包含目錄或者是否存在目錄。我正在從一本書開始,帶有教程和複習題。不幸的是,沒有答案的關鍵,甚至沒有提示。BASH需要腳本幫助

  • 顯示與狀態1的錯誤消息並退出,如果沒有參數被給予
  • 顯示錯誤消息並以狀態2退出如果源不是目錄
  • 顯示錯誤消息並退出與狀態3如果目標不存在或不是一個目錄

以上是我必須做的,到目前爲止,第一個我相信我已經做得正確,如果沒有請糾正我,或者指導我在正確的方向。正如我在給出樣品時學到的最好,我想我會尋求幫助。

if [ $? ]; then 
    echo "You must supply at least one parameter" 
    exit 1 
fi 
    #The above is the part I am pretty sure is correct. 


if [ $? -d $directory "$1" ]; then 
    echo "$directory is not a directory" 
    exit 2 
fi 
#The above was self written. I am almost positive it is wrong. 

if [ $? -lt 2 ]; then 
    set "$1" .pwd 
fi 
#the above was given to me from the book as a reference point to start (tutorial) 

回答

2

$?是您執行的命令的返回代碼。也許你認爲這是當前腳本的返回碼。無論如何,這不是在做你認爲正在做的事情。

我所有的例子都假定你的命令,像下面這樣運行:script [source] [destination]

錯誤信息,如果沒有給定參數:

if [ ! "$#" ]; then 
    echo "please supply a parameter" 
    exit 1 
fi 

顯示錯誤,如果源不是目錄

if [ ! -d "$1" ]; then 
    echo "$1 is not a directory" 
    exit 2 
fi 

如果目的地不存在或不是目錄,則顯示錯誤

if [ ! -d "$2" ]; then 
    echo "$2 doesn't exist or isn't a directory" 
    exit 3 
fi 
+0

`if`和`[`之間應該有空格。應引用`$ 1`和`$ 2`來避免字段拆分和路徑名的生成。 `||`分隔命令,所以你需要`如果[! -e「$ 2」] || [! -d「$ 2」];然後`(儘管`-e`測試在這裏是多餘的,`-d`如果不存在則返回false)。 – jilles 2010-11-23 23:09:34