2016-12-22 75 views
0

我試圖做一個if語句,其中如果小時13和23之間將設置小時回12.現在下面是我的shell腳本代碼的片段:如果with語句和shell腳本

#!/bin/bash 

HOUR=$1 
if [ $HOUR > 13 ] && [ $HOUR < 23 ]; 
then 
     $HOUR=12 
fi 

現在我運行此腳本時出現錯誤。我如何調整這個腳本以獲得上面指定的所需條件?

+1

你能否通過[shellcheck]運行它(http://shellcheck.net)並解決它首先指出的問題? –

+0

你有什麼錯誤? – user3553031

+0

''''和'<'是shell中的重定向操作符。 – Barmar

回答

1
if [ $HOUR -gt 13 -a $HOUR -lt 23 ] 
then 
    HOUR=12 
fi 
  • 使用-gt和-lt代替> <(重定向操作)的,並在相同的表達
  • 使用-a
  • 修正錯字$HOURS=12(刪除$)
+0

'-a'被認爲是過時的。改用'[「$ HOUR」-gt 13] && [「$ HOUR」-lt 23]'。 – chepner

0

您需要以算術方式而不是文本方式評估該表達式。嘗試是這樣的:

#!/bin/bash 

HOUR=$1 
if (($HOUR > 13)) && (($HOUR < 23)); 
then 
     HOUR=12 
fi 
+0

你可以在裏面使用'&&':'(($ HOUR> 13 && $ HOUR <23))'。 – chepner

+2

你不需要'$':'((HOUR> 13 && HOUR <23))';) –

0

要在猛砸測試使用<>,你需要的[[...]]形式的測試結構的。但是,這並不符合你的想法。這些是詞典測試。

您可以使用-lt-gt的算術比較:

$ H=14 
$ [[ $H -gt 13 && $H -lt 23 ]]; echo $? 
0 

0意味着在這種情況下,真正的...)

或者,使用((...))算術測試結構。然後你可以使用C風格的三元分配測試和一步到位分配:

$ H=20 
$ ((H = H>13 && H<23 ? 12 : H)); echo $H 
12 
0

較短的版本:

#!/bin/bash 
HOUR=$1 
[[ $HOUR > 13 && $HOUR < 23 ]] && HOUR=12