if語句似乎沒有正常運行,不管if語句的結果如何,程序啓動。我錯過了什麼?如果語句失敗bash
#!/bin/bash
dtime=($(date |cut -c12-13))
sevenO="19"
redshift=($(gtk-redshift -l -31.9530044:115.8574693))
if ([[ "$dtime" -gt "$sevenO" ]])
then
$redshift
fi
if語句似乎沒有正常運行,不管if語句的結果如何,程序啓動。我錯過了什麼?如果語句失敗bash
#!/bin/bash
dtime=($(date |cut -c12-13))
sevenO="19"
redshift=($(gtk-redshift -l -31.9530044:115.8574693))
if ([[ "$dtime" -gt "$sevenO" ]])
then
$redshift
fi
難道我理解正確的話,你只需要運行gtk-redshift
如果時間是8點到午夜之間?如果是這樣,問題是,這個符號:
$(...)
運行命令...
立即,並評估其輸出;因此該語句:
redshift=($(gtk-redshift -l -31.9530044:115.8574693))
運行命令gtk-redshift -l -31.9530044:115.8574693
,然後將變量redshift
是包含命令的輸出的陣列。 (一個數組,因爲包圍了(...)
注意,在Bash中,括號是而不是僅僅用於分組,它們有實際的行爲—,例如,在這種情況下,創建一個數組—,你不應該在你不希望這些行爲)
您可以簡化您的bash腳本只是這一點:
#!/bin/bash
if [[ "$(date +%k)" -ge 20 ]] ; then
gtk-redshift -l -31.9530044:115.8574693
fi
請注意,如果小時數爲08或09,這會讓您陷入麻煩 - 您會得到八進制錯誤。使用'date +%k'或強制base-10加上'if((10#$(date +%H)> = 20))' –
@glennjackman:哎呀,謝謝。我使用了'+%H'因爲我打算繞過數值比較並使用'>',但是後來我決定使用'20'而不是'19',並且字符串比較不允許'> = ',所以我切換回數字比較,並忘記切換到'+%k'。長話短說 。 。 。我現在要修復它。謝謝。 :-) – ruakh
當你運行這個你檢查的dtime和seven0的價值? if語句看起來很好,所以我猜你的價值觀並不是你所期待的。 – regulatethis
你一直使用括號。我不認爲這意味着你的想法。 – kojiro
爲了進行調試,您應該使用'set -x'作爲bash腳本的第二行。它會詳細輸出您的腳本實際執行的操作。你可以用'set + x'關掉它。 – Perleone