2012-11-14 57 views
2

您好我正在somoething上工作,我需要創建一個if語句,它將採用多個變量'& &'和'||'組合。現在我正在嘗試這個簡單的任務,但我得到錯誤'命令未找到'。我想第一個& &兩個計數比||它帶有我在我的代碼中設置的標誌。以下是我正在嘗試的代碼多個和ors在if語句bash中

if [[$pcount -eq 0 ] && [$ucount -eq 0]] || [test $flag -eq 1] 
then 
do my stuff 
else 
exit 1 
fi 

在此先感謝您。

回答

7

不能嵌套[ ... ],因爲[是一個shell命令,而不是一個單獨的語法結構。在bash中,你可以使用[[ ... ]]語法結構,它不支持嵌套和便攜式sh可以使用(...)括號的優先級:

if ([ $pcount -eq 0 ] && [ $ucount -eq 0 ]) || [ $flag -eq 1 ] 

補充說明:

  • [test condition]不作因爲[運營商已經是test的別名。編寫[ condition ]test condition

  • [和測試之前留出空格,否則sh將不會識別[作爲命令名稱。 [是一個像其他任何命令一樣的命令,與特殊的解析規則無關。

+0

謝謝你這麼廣泛的答案 –

2

在bash中,你可以做這樣的:

if [[ ($pcount == 0 && $ucount == 0) || ($flag == 1) ]] 
then 
    echo "do stuff" 
fi 

或者:

if [ "$pcount" -eq 0 -a "$ucount" -eq 0 ] || [ "$flag" -eq 1 ] 
then 
    echo "do stuff" 
fi 

不過,我會建議第一種方法。