成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

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

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

網(wǎng)友解答:

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

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

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

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

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

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

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

IP_PATTERN=“^$”

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

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

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

if [ $IP=~ $IP_PATTERN ]

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

echo $IP | grep -E $IP_PATTERN

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

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

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

因?yàn)橛辛松弦徊匠醪降倪^濾,能夠通過“考驗(yàn)”的合規(guī)字符串都是

XXX.XXX.XXX.XXX

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

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

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

最終效果

拿幾個(gè)字符串來試一下效果:

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

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

標(biāo)簽: