天天看點

Shell腳本判斷IP是否合法性(多種方法)

運維角度來說,寫shell腳本經常會遇到判斷輸入的值是否合法,比如ip、郵件位址等。那麼,根據自身寫腳本中總結的判斷ip合法性腳本分享給網友,遇到時能有所參考。

思路:ip由四位數字組成,以點分割,每個字段不能大于255,必須符合這種格式

方法1:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<code>#!/bin/bash</code>

<code># blog: http://lizhenliang.blog.51cto.com</code>

<code> </code> 

<code>function</code> <code>check_ip() {</code>

<code>    </code><code>ip=$1</code>

<code>    </code><code>valid_check=$(</code><code>echo</code> <code>$ip|</code><code>awk</code> <code>-f. </code><code>'$1&lt;=255&amp;&amp;$2&lt;=255&amp;&amp;$3&lt;=255&amp;&amp;$4&lt;=255{print "yes"}'</code><code>)</code>

<code>    </code><code>if</code> <code>echo</code> <code>$ip|</code><code>grep</code> <code>-e </code><code>"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"</code><code>&gt;</code><code>/dev/null</code><code>; </code><code>then</code>

<code>        </code><code>if</code> <code>[ ${valid_check:-no} == </code><code>"yes"</code> <code>]; </code><code>then</code>

<code>            </code><code>echo</code> <code>"ip $ip available."</code>

<code>        </code><code>else</code>

<code>            </code><code>echo</code> <code>"ip $ip not available!"</code>

<code>        </code><code>fi</code>

<code>    </code><code>else</code>

<code>        </code><code>echo</code> <code>"ip format error!"</code>

<code>    </code><code>fi</code>

<code>}</code>

<code># example</code>

<code>check_ip 192.168.1.1</code>

<code>check_ip 256.1.1.1</code>

方法2:

20

21

22

<code>    </code><code>if</code> <code>[[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; </code><code>then</code>

<code>        </code><code>field1=$(</code><code>echo</code> <code>$ip|</code><code>cut</code> <code>-d. -f1)</code>

<code>        </code><code>field2=$(</code><code>echo</code> <code>$ip|</code><code>cut</code> <code>-d. -f2)</code>

<code>        </code><code>field3=$(</code><code>echo</code> <code>$ip|</code><code>cut</code> <code>-d. -f3)</code>

<code>        </code><code>field4=$(</code><code>echo</code> <code>$ip|</code><code>cut</code> <code>-d. -f4)</code>

<code>        </code><code>if</code> <code>[ $field1 -</code><code>le</code> <code>255 -a $field2 -</code><code>le</code> <code>255 -a $field3 -</code><code>le</code> <code>255 -a $field4 -</code><code>le</code> <code>255 ]; </code><code>then</code>

加個循環,如果錯誤則重新輸入,直到正确:

23

24

<code>    </code><code>local</code> <code>ip=$1</code>

<code>    </code><code>if</code> <code>echo</code> <code>$ip|</code><code>grep</code> <code>-e </code><code>"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"</code> <code>&gt;</code><code>/dev/null</code><code>; </code><code>then</code>

<code>        </code><code>if</code> <code>[ $valid_check == </code><code>"yes"</code> <code>]; </code><code>then</code>

<code>         </code><code>echo</code> <code>"ip $ip  available!"</code>

<code>            </code><code>return</code> <code>0</code>

<code>            </code><code>return</code> <code>1</code>

<code>        </code><code>return</code> <code>1</code>

<code>while</code> <code>true</code><code>; </code><code>do</code>

<code>    </code><code>read</code> <code>-p </code><code>"please enter ip: "</code> <code>ip</code>

<code>    </code><code>check_ip $ip</code>

<code>    </code><code>[ $? -</code><code>eq</code> <code>0 ] &amp;&amp; </code><code>break</code>

<code>done</code>