2014-02-08 55 views
0

我從用戶通過命令行獲取輸入要檢查是否有輸入或不使用$ @shell腳本參數太多錯誤[無法使用引號來解決]

用戶調用等如以下幾種方式:

sh program <file1> <file2> .. 
腳本

sh program < file1 

我做如下:

test -z "[email protected]" 
if test $? -eq 0 
then 
    compute 
else 
     do something.. 
fi 

如果用戶調用程序時所用多行,然後我得到一個錯誤,從 測試-z「$ @」說,「測試:參數太多」

我試圖解決這個問題,但我被卡住了。你知道我能克服嗎?

回答

1

$#給出了參數的數量。

if (($# > 0)); then 
    echo "passed $# arguments: [email protected]" 
else 
    echo "no arguments" 
fi 
3

的問題是,鑑於這樣的:

test -z "[email protected]" 

如果用戶運行多個參數腳本,這最終等同於:

test -z "arg1" "arg2" "arg3" 

這就是爲什麼你'收到「太多爭論」的錯誤。有關詳細信息,請閱讀bash(1)手冊頁的「參數」部分的「特殊參數」小節。你真的想查什麼可能是$#,傳遞給你的腳本參數的個數:

if test $# -eq 0 
then 
    compute 
else 
     do something.. 
fi 

但你也可以測試對$*,這就好比[email protected]擴展到命令行參數,但作爲一個字符串:

if test -z "$*" 
then 
    compute 
else 
     do something.. 
fi 
0

$?是shell退出狀態變量。如果要檢查輸入的最後一條命令是通過返回0表示真或非零值來執行true或false。

$#是顯示用戶傳遞了多少個參數的shell變量。你可以用變量$ 0,$ 1到$ 9訪問那些參數,其中$ 0變量帶有命令名,所以你將使用起始$ 1。

例子。

if test $# -gt 0 
then 
echo "You pass $# Arguments"; 
echo "First Argument is : $1"; 
echo "Second Argument is : $2"; 
else 
echo "You did not pass any Arguments"; 
fi