2013-06-12 44 views
0

如何檢查是否字符串包含版本數字小/十進制格式的shell腳本我們如何檢查是否字符串是一個版本號或不

的如我們有1.2.3.5或2.3.5

如果我們對這裏的字符數量沒有限制,該怎麼辦?它也可以是x.x.x.x或x.x。

+1

正則表達式? –

+1

你關心-alpha版本,RC版本,-stable版本等嗎? –

+0

希望您的腳本不包含IP地址。 – devnull

回答

1

使用bash regular expressions

echo -n "Test: " 
read i 

if [[ $i =~ ^[0-9]+(\.[0-9]+){2,3}$ ]]; 
then 
    echo Yes 
fi 

此接受digits.digits.digitsdigits.digits.digits.digits

變化{2,3}縮小或放大的.digits可接受號碼(或{2,}爲 「至少2」)

  • ^表示字符串開頭
  • [0-9]+指至少一個數字
  • \.是點
  • (...){2,3}接受2或內部的()
  • $什麼3表示字符串的結束
+1

您可以使用'{2,}'去除上限:1.2.3.4.5.6.7.8 –

+0

@glennjackman謝謝。回答這個問題,它似乎是3或4個數字,但的確,這可能是*至少2 *(+1,第一個) –

+0

謝謝,上限是個好主意 –

3

如果您使用bash,您可以使用正則表達式=~比賽二元運算,例如:

pax> if [[ 1.x20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi 

pax> if [[ 1.20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi 
yes 

爲特定的測試數據,下面的正則表達式會做的伎倆:

^[0-9]+(\.[0-9]+)*$ 

(後跟任意數量的.<number>擴展的數字),但是,如果要處理邊緣情況(如1.2-rc74.5-special),則需要更復雜一些。

-2

翻轉的邏輯:檢查它是否包含一個「無效」字符:

$ str=1.2.3.4.5; [[ $str == *[^0-9.]* ]] && echo nope || echo yup 
yup 
$ str=123x4.5; [[ $str == *[^0-9.]* ]] && echo nope || echo yup 
nope 

本答覆的下限WER:

$ str=123....; [[ $str == *[^0-9.]* ]] && echo nope || echo yup 
yup 
0

如果你真的僅限於Bourne shell中,然後用EXPR

if expr 1.2.3.4.5 : '^[0-9][.0-9]*[0-9]$' > /dev/null; then 
    echo "yep, it's a version number" 
fi 

我敢肯定有涉及AWK或sed的解決方案,但這個會做。

+0

實際上,這會接受「1 ..2「,這可能不被你接受。 –

相關問題