2014-01-28 38 views
-2

我想用三個表達式創建一個if語句。這是我試過,但不起作用:如果在shell中有3個表達式的語句

if [ $a = $b -a $c -gt $d ] || [ $a = $f ]; 

通過上述表達式,如果$a = $f它不執行if語句體。這可能嗎?我嘗試過不同的組合,而且都沒有效果。

編輯:

這裏是我的要求完整的例子:

a=9.3 
c=9.3.0 
q=/a/b/c/d ${a} 
if [ "${a}" = "9.2" -a ${c:4:4} -ge 4 ] || [ "${a}" = "9.3" ] 
then 
    q=/a/b/d ${a} 
fi 

我加入了|| [ "${a}" = "9.3" ]

+1

適用於'a = 1 b = 1 f = 1 c = 2 d = 3' –

+1

似乎也適用於我,您可以嘗試發佈一個完整的可執行示例,包括變量的值嗎? –

+0

@GavinSmith我更新了我的問題 – user972276

回答

1

你之前,如果條件是好的這個工作。問題出在您的作業上。

此:

a=9.3 
q=/a/b/c/d ${a} 

不會使分配/a/b/c/d 9.3給變量q

它會嘗試運行一個名爲9.3的命令並給它一個臨時變量q=/a/b/c/d

運行此腳本會產生兩個錯誤,說明9.3: command not found。請不要忽略錯誤或意外輸出。它們對於檢測和診斷問題很重要。

我不知道你的意圖是什麼,但你可能意味着:

a=9.3 
c=9.3.0 
q="https://stackoverflow.com/a/b/c/d ${a}" 
if [ "${a}" = "9.2" -a ${c:4:4} -ge 4 ] || [ "${a}" = "9.3" ] 
then 
    q="https://stackoverflow.com/a/b/d ${a}" 
fi 

運行此代碼後,你可以做echo "$q",它會說/a/b/d 9.3像你預期,這表明當時的分支被採取了。

+0

+1,但你還應該指出,(a)使用'[[...]]'比''在bash中通常優先''a'(和'-o')在'[...]'中是不規範的;請使用'[[...]]'中的'&&'和'||'代替 - 請參閱http://mywiki.wooledge.org/BashGuide/TestsAndConditionals。 – mklement0