運維角度來說,寫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<=255&&$2<=255&&$3<=255&&$4<=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>></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>></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 ] && </code><code>break</code>
<code>done</code>