国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

Linux Shell如何判斷IP的合法性?

網(wǎng)友解答: 要解決Linux下判斷IP的合法性問題,老規(guī)矩,先進行問題分解。這個問題可以分解為:判斷給出的IP是否為4段由'.'分隔的數(shù)字組合限制每個數(shù)字組合的大小在0-255之間多說一

網(wǎng)友解答:

要解決Linux下判斷IP的合法性問題,老規(guī)矩,先進行問題分解。這個問題可以分解為:

判斷給出的IP是否為4段由'.'分隔的數(shù)字組合

限制每個數(shù)字組合的大小在0-255之間

多說一句:檢測IP的合法性的算法在網(wǎng)上一搜一大把,一篇文章抄來抄去。但都是甩出一大堆代碼來沒有很具體的解釋,看上去很方便,但是對參照學(xué)習(xí)的人一點好處都沒有,囫圇吞棗,抄完了還是啥都不會。

第一步我們先實現(xiàn)“判斷給出的IP是否為4段由'.'分隔的數(shù)字組合”的目標(biāo)

一、Linux bash shell編程的時候遇到這種需要檢測格式的問題,首先就要想到正則表達式。下面我先逐步用組合的方式來構(gòu)造我們需要的正則表達式:

正則表達式匹配固定模式的字符串的時候,我們首先安排一個標(biāo)記字符串開頭和結(jié)尾的模式;^和$。^代表字符串的開頭位置,$代表字符串的結(jié)尾位置,在它們中間的部分就是用來匹配字符串的內(nèi)容:

IP_PATTERN=“^$”

0~255這樣一個數(shù)字用正則表達式的語言來說就是:0-9的數(shù)字最少匹配1次,最多匹配3次。分隔的“.”符號需要使用轉(zhuǎn)義字符,因為“.”在正則表達式中代表除“ n”之外的任何單個字符,按照IP的格式我們構(gòu)造4段0~255的數(shù)字,加上前面的開始結(jié)束符號,就是這個樣子:

IP_PATTERN=“^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$”

二、根據(jù)正則表達式判斷IP是否“合規(guī)”可以使用if條件判斷

if [ $IP=~ $IP_PATTERN ]

也可以使用grep語句加上-E參數(shù)

echo $IP | grep -E $IP_PATTERN

使用grep語句看一下我們構(gòu)造的正則表達式的效果:

可以看到已經(jīng)達到我們的要求,下一步要想辦法限制每段數(shù)字的范圍在0~255之間。

第二步,限制數(shù)字的范圍在0~255之間

因為有了上一步初步的過濾,能夠通過“考驗”的合規(guī)字符串都是

XXX.XXX.XXX.XXX

這種形式。所以這里我們使用awk語句,將'.'看做域分隔符,把這4個數(shù)字分隔開之后分別提取進行輸出。前面的正則表達式已經(jīng)能夠保證每個數(shù)字都是非負(fù)的,所以不需要判斷≥0的情況:

echo $FILTERED_IP | awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "This IP is valid."}'

如果每一段的數(shù)字都在0~255之間,就會打印This IP is valid.。

最終效果

拿幾個字符串來試一下效果:

192.168.1.1

192.168.1.1.1

192.168.1.a

192.168.1.278

可以看到能夠?qū)崿F(xiàn)我們需要的效果。

寫成一行就是:

echo $IP | grep -E "^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "This IP is valid."}'

總結(jié)一下:“盡信書不如無書”,各種實例在網(wǎng)上確實可以信手拈來,但是“拿來主義”導(dǎo)致的后果就是學(xué)不到東西。所以遇到shell編程的問題,先不要慌,跟著我來,老規(guī)矩,先問題分解。

如果我的回答對你有點價值,請莫忘點贊加關(guān)注,謝謝!歡迎在評論區(qū)發(fā)表各種意見。

標(biāo)簽: