2015-10-05 75 views
0

好吧,這是一個任務,所以我不會在這裏確切的腳本,但我真的很絕望在這一點上,因爲我不能像一樣基本的東西。所以我基本上檢查在命令行中寫入的兩個參數是否合適(用戶需要正確鍵入)或者它會回顯特定的錯誤消息。但是,當我輸入一個具有100%正確參數的命令時,我會從第一個有條件的ALWAYS(即使我切換條件語句)中收到錯誤回顯消息。看起來腳本只是運行第一個回聲,不管怎樣都停下來。請幫忙,我知道這可能很難,因爲我的代碼更像是一個骨架。bash腳本與if,elif,其他

if [ ... ]; then 
echo "blah" 

elif [ ... ]; then 
echo "blah2" 

else for file; do 
#change file to the 1st argument 

done 
fi 

我明顯需要最後一個纔會發生,以便我的腳本實際服務於其預期目的。但是,我的問題正在困擾着我。 if和elif需要返回false才能讓腳本運行適當的參數。 if和elif檢查是否正確輸入了命令行中的人員。

+3

您可能需要顯示您正在進行的測試,因爲如果有效參數意味着您沒有達到'else'塊,這可能意味着你的測試已經倒過來了(你需要檢查'如果arg1是無效的,那麼echo echo blah blah 1 elif arg2 is invalid then echo blah bletch 2 else ... fi'。 –

+0

什麼是實際的代碼你運行的地方顯示'......'這是真正最相關的細節 – chepner

回答

2

elif mean else-if。所以它只會被檢查,如果第一個語句返回false。所以如果你想檢查兩者是否正確的話。

if [ ... ] then 
... 
fi 

if [ ... ] then 
... 
fi 
+0

你在這些語句的'''中做了什麼?'if' ...'elif' ...'else'除非你在'''body聲明中退出腳本,並且''''''''後面留有空格,因爲它們在shell中是_crucial_ ogramming。 –

+0

@jonathan我同意爲了他的目的,你建議的結構是最好的,但是你不能通過這樣做來回應這兩個論點是錯誤的。 – geokavel

0

當你在乎檢查第一命令行參數的狀態(即它們必須滿足一系列標準的條件爲真),那麼你將需要一個複合測試結構,如:

if [ "$1" = somestring -a "$2" = somethingelse ]; then 
    do whatever 
fi 

這也可以寫成

if [ "$1" = somestring ] && [ "$2" = somethingelse ]; then 
... 

注:[ .... -a .... ]語法仍然支持,但建議使用[ .... ] && [ .... ]語法新的發展。

您也可以改變它們由在第二形式使用-o用於OR條件或||測試(或者真/假)的方式。您可以使用不同的測試表達式進一步改變您的測試(例如=,!=,-gt等)。

+1

*應該寫* [&] [...]。 '-a'由於歷史原因而受支持,但不建議用於新代碼。 – chepner

+0

同意,這就是兩個版本都給出的原因。我想重點應該更清楚。 –