2015-05-17 60 views
0

我必須編寫這個腳本,它將顯示每行輸入自己的行,並用「*****」分隔每行。我已經明白了這一點,但現在我需要它來檢測什麼時候將「TestError」和/或「now」作爲參數輸入。現在它的設置方式會正確檢測這些單詞,如果它們是該行的第一個參數,我不知道如何將它設置在檢測該單詞的位置,而不管它在哪行上。我還需要幫助*?在我需要它說「不知道該怎麼處理」的情況下,對於不是「TestError」或「now」的其他所有參數,此時它將爲第一個參數執行,而不是其他參數。bash腳本case語句需要檢測特定參數

它會按照現在的方式工作嗎?或者我只需要使用*?和*的情況下,只是把一個if/then/else/fi語句放在*中?以便找到「TestError」「now」和其他任何參數。

# template.sh 
function usage 
{ 
    echo "usage: $0 arguments ..." 
    if [ $# -eq 1 ] 
    then echo "ERROR: $1" 
    fi 
} 



    # Script starts after this line. 


case $1 in 

    TestError) 
    usage $* 
    ;; 
    now) 
    time=$(date +%X) 
    echo "It is now $time" 
    ;; 
    *?) 
    echo "My Name" 
    date 
    echo 
    usage 
    printf "%s\n*****\n" "Do not know what to do with " "[email protected]" 
    ;; 
    *) 
    usage 
    ;; 
esac 

回答

2

您需要遍歷參數,爲每個參數執行case語句。

for arg in "[email protected]"; do 
    case $arg in 

     TestError) 
     usage $* 
     ;; 
     now) 
     time=$(date +%X) 
     echo "It is now $time" 
     ;; 
     *?) 
     echo "My Name" 
     date 
     echo 
     usage 
     printf "%s\n*****\n" "Do not know what to do with " "[email protected]" 
     ;; 
     *) 
     usage 
     ;; 
    esac 
done 

**?將匹配相同的字符串。你的意思是匹配?字面意思(*\?)?

+0

很酷的感謝,我試圖做一個循環內的案件陳述之一哈哈。 – PFKrang

+0

*和*?我只是用一個來檢測是否輸入了參數,另一個是用來檢測是否輸入了任何內容。我不確定是否有更好的方法來做到這一點。 – PFKrang

+1

如果沒有參數,甚至不會輸入循環。你可以用''「'(空字符串)匹配一個空參數。 – chepner