2015-05-25 46 views
0

如何使用一系列參數在linux的bash像60-70 - >($ -1 - $ 2)Linux的擊腳本如何使用的範圍內的參數

case $1 in 
      $1-$2) 
       echo "test" 
       shift;; 

     ....) .... 
+0

你不能。病例陳述中的條款必須是單一值。你基本上是在做一個字符串,比如'$ 1'和'$ 1- $ 2'產生的字符串。 '情況下「富」 IN「富巴」)' –

+0

他們不必爲單值;他們可以是模式。但是,模式不能很好地處理數字範圍。 – chepner

+0

好的謝謝,但我需要一個解決方案,你能幫我嗎? @chepner –

回答

2

一個case語句的每個情況下是一個模式,但取決於範圍,指定一個好的模式可能會很棘手。 60-70,例如,可以用

case $1 in 
    6[0-9] | 70) echo "test" 
       shift ;; 

基本上匹配,你必須把這些數字作爲數字串,並與它們匹配的文本。例如,像67-93這樣的範圍分解爲相當笨重的東西

6[7-9] | [78][0-9] | 9[0-3] 
0

你可以爲它製作一個函數。
當你有不同的範圍,作出這樣範圍的參數(檢查,最小值,最大值)。
返回1,當檢查< minimimum,0當內部邊界 (或等於邊界)檢查和2以上:

range() { 
    if [ "$1" -lt "$2" ]; then 
     return 1 
    fi 
    if [ "$1" -gt "$3" ]; then 
     return 2 
    fi 
    return 0 
} 

當你想爲不同範圍的不同的回報,改變該功能。 編輯:添加引號並做出正面的返回值。 編輯2:改變function xx()

+2

需要更多的報價,以避免一些不良值(空值,多字值,水珠字符等)引起的測試命令語法錯誤而不是(更傳統的)無效比較數據錯誤。如果你要使用POSIX不兼容'function'關鍵字,爲什麼不走整個生豬和使用非POSIX數學語法呢? 'if(($ 1 <$ 3))'等。另外,'-1'不是有效的返回值;只允許使用單字節整數,所以在處理的第一種情況下,它當前退出並出現錯誤。 –

+0

好的,改變它。 –

+0

好得多; LGTM。 –

相關問題