2009-05-26 68 views
5

所以基本上我試圖檢查傳入腳本的參數。如果它有三個參數,第三個參數是1,那麼我希望它繼續。我也希望它繼續如果它有四個參數,第三個參數是不是1Bash腳本中的參數檢查問題

所以基本上我認爲我可能只是這樣做......

if ([ $# -ne 3 ] and [ "$3" -ne "2" ]) 
then 
exit 0 
fi 

但是似乎擊不有和用於if的,所以我想我可以使用嵌套的if,但是現在它仍在抱怨。所以這就是我目前的...

if [ $# -ne 3 ] 
then 
if [ "$3" -ne "1" ] 
then 

echo "Improper number of arguments. 
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT> 

Select can be left off if you want all data (Mode=1) 
" 
exit 0 

fi 
fi 
if [ $# -ne 4 ] 
then 
if [ "$3" -ne "2" ] 
then 

echo "Improper number of arguments. 
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT> 

Select can be left off if you want all data (Mode=1) 
" 
exit 0 

fi 
fi 

那麼我哪裏錯了?我不能在Bash中嵌套if語句嗎?有沒有超級禪宗的做法,我完全錯過了?

感謝您給我的任何幫助。


新問題......

現在,出於某種原因或其他,代碼是不工作的。沒有任何錯誤或任何錯誤,它只是不起作用。它不檢查參數的數量。我沒有任何參數運行腳本,它只是跳過它,就像它甚至沒有。

奇怪的是,我是肯定該代碼昨天工作。今天回來,不是那麼多。關於什麼問題的任何想法? (對不起,我不得不刪除這個公認的答案。)

if [[ $# = 3 && "$3" != "1" ]] 
then 

echo "Improper number of arguments. 
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT> 

Select can be omitted if all data is required (Mode=1) 
" 
exit 0 

fi 

if [[ $# > 4 ]] 
then 

echo "Improper number of arguments. 
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT> 

Select can be omitted if all data is required (Mode=1) 
" 
exit 0 

fi 

編輯II:

有幾件事情,Bash shell中不喜歡這個劇本,我試圖去做。我最終可能會用另一種腳本語言來重寫它,併爲項目做更多的事情。感謝任何情況下的幫助。

+1

你會得到什麼錯誤? – Glen 2009-05-26 15:48:10

回答

19
if [ $# -ne 3 -a "$3" -ne "1" ]; then 
    exit 0 
fi 

僅供參考

-a = and 
-o = or 

或者,你可以只使用用途:

if [[ $# != 3 && "$3" != "1" ]]; then 
+0

感謝您的幫助。這幫助我解決了其他一些我正在編寫的腳本。 – 2009-05-26 18:28:55