您好,登錄后才能下訂單哦!
小編給大家分享一下Linux系統shell腳本編程的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
1、開發腳本前準備
一般大家都知道,測試主機是否在線,常用的命令無非就是ping、nmap,因此,首先找一個地址來測試下ping命令的效果
[root@centos6 scripts]# ping 172.16.1.1
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_seq=1 ttl=255 time=3.43 ms
64 bytes from 172.16.1.1: icmp_seq=2 ttl=255 time=0.699 ms
^C
--- 172.16.1.1 ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8448ms
rtt min/avg/max/mdev = 0.525/1.053/3.436/0.884 ms
好像單純的這種命令是無法來做批量檢查的,必須要帶一些參數,否則它們一直ping下去
[root@centos6 scripts]# ping -W 2 -c 2 172.16.1.1
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_seq=1 ttl=255 time=0.704 ms
64 bytes from 172.16.1.1: icmp_seq=2 ttl=255 time=0.481 ms
--- 172.16.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.481/0.592/0.704/0.114 ms
這種方法可以實現,測試發送2個數據包,然后加上超時時間,自動停止,可以達到效果
[root@centos6 scripts]# echo $?
0
[root@centos6 scripts]# ping -W 2 -c 2 172.16.1.100
PING 172.16.1.100 (172.16.1.100) 56(84) bytes of data.
^C
--- 172.16.1.100 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 2836ms
[root@centos6 scripts]# echo $?
1
因此,我們可以通過返回值來判斷是否在線
2、開發簡單腳本
既然有實現的方法了,那么接下來就開始開發腳本了
[root@centos6 scripts]# vi checkip.sh
#!/bin/sh
. /etc/init.d/functions
#加載系統函數庫
CMD="ping -W 2 -c 2"
#定義命令變量
IP="172.16.1.2 172.16.1.3 172.16.1.100"
#定義IP變量
for n in $IP
#for循環語句
do
$CMD $IP$n >/dev/null 2>&1
#將命令結果不輸出
if [ $? -eq 0 ];then
#如果返回值為0就表明在線
action "$IP$n is online" /bin/true
#在線就打印此信息
else
#否則就表示不在線
action "$IP$n is not online" /bin/false
#不在線就打印此信息
fi
done
執行下腳本看看結果如何
[root@centos6 scripts]# sh checkip.sh
172.16.1.2 is online [ OK ]
172.16.1.3 is online [ OK ]
172.16.1.100 is not online [FAILED]
此時肯定有小伙伴問了,你這個腳本測試的只有三個IP,如果內網整個網段IP都手工寫上去,豈不是更費時費力,因此,如果是整個網段,那么定義IP變量時可以定義成這樣IP="172.16.1." ,因為前三位是相同的,寫for 循環時可以修改成如下
for n in `seq 254`
do
$CMD $IP$n(將兩段數字拼接成IP地地址)
done
具體這里就不再測試了,有興趣的可以自行測試下
3、開發nmap腳本檢查在線IP與在線IP的開放端口情況
首先得了解下nmap的一些參數,它也是非常實用的命令之一,在日常實際生產環境中,經常用來檢查IP、端口、URL地址信息,具體其中的參數這里就不做詳細介紹了,后續有時間會分享它的相關參數用法
[root@centos6 scripts]# nmap -sP 172.16.1.1
Starting Nmap 5.51 ( http://nmap.org ) at 2016-12-03 21:09 CST
Nmap scan report for 172.16.1.1
Host is up (0.0091s latency).
MAC Address: 04:BD:70:FB:A9:B7 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
[root@centos6 scripts]# nmap -sP 172.16.1.100
Starting Nmap 5.51 ( http://nmap.org ) at 2016-12-03 21:09 CST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 0.41 seconds
從上面的結果來看,很容易發現在線與不在線返回的信息不同,但是我們需要取得在線的IP地址信息,那到就只能取 Nmap scan report for 172.16.1.1 ,因為所有在線的IP返回的信息中都會有這一行信息,所以取相同的信息。
[root@centos6 scripts]# nmap -sS 172.16.1.1|grep "Nmap scan report for"
Nmap scan report for 172.16.1.1
[root@centos6 scripts]#
nmap -sS 172.16.1.1|grep "Nmap scan report for"|awk '{print $5}'
172.16.1.1
#取出IP信息
[root@centos6 scripts]# nmap -sS 172.16.1.1
Starting Nmap 5.51 ( http://nmap.org ) at 2016-12-03 20:56 CST
Nmap scan report for 172.16.1.1
Host is up (0.041s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp filtered ssh
23/tcp open telnet
80/tcp open http
179/tcp filtered bgp
443/tcp open https
MAC Address: 04:BD:70:FB:A9:B7 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 8.74 seconds
檢查開啟端口,我們可以通過過濾關鍵字 open 來實現,通過上面的信息很容易觀察出來
[root@centos6 scripts]# nmap -sS 172.16.1.1|grep "open"
21/tcp open ftp
23/tcp open telnet
80/tcp open http
443/tcp open https
[root@centos6 scripts]# nmap -sS 172.16.1.1|grep "open"|awk '{print $1}'
21/tcp
23/tcp
80/tcp
443/tcp
4、編寫腳本并測試效果
[root@centos6 scripts]# vi checkip_namp01.sh
#!/bin/sh
. /etc/init.d/functions
#加載系統函數庫
FCMD="nmap -sP "
#定義第一個命令變量
IP="172.16.1.1 172.16.1.2 172.16.1.100"
#定義IP變量
TCMD="nmap -sS"
#定義第一個命令變量
UPIP=`$FCMD $IP|grep "Nmap scan report for"|awk '{print $5}'`
#定義獲取在線IP的變量
for ip in ${UPIP}
#for手環語句
do
action "$ip is on line" /bin/true
#打印信息
UPPORT=`$TCMD $ip|grep "open"|awk '{print $1}'`
#定義獲取在線IP的開放端口變量
for port in ${UPPORT}
#二層循環檢查端口
do
action "$ip $port is open" /bin/true
#將上面在線IP開放的端口信息打印輸出
done
done
注:UPPORT=`$TCMD $ip|grep "open"|awk '{print $1}'` 定義這個變量時,取的IP地址一定要是上一個循環取出的IP地址,否則會有問題
執行腳本,測試效果如何?
[root@centos6 scripts]# sh checkip_namp01.sh
172.16.1.1 is on line [ OK ]
172.16.1.1 21/tcp is open [ OK ]
172.16.1.1 23/tcp is open [ OK ]
172.16.1.1 80/tcp is open [ OK ]
172.16.1.1 443/tcp is open [ OK ]
172.16.1.2 is on line [ OK ]
172.16.1.2 23/tcp is open [ OK ]
172.16.1.100沒有出現的原因是它不在線
接下來測試下腳本檢查的端口是否正確
[root@centos6 scripts]# telnet 172.16.1.1 443
Trying 172.16.1.1...
Connected to 172.16.1.1.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
[root@centos6 scripts]# telnet 172.16.1.1 21
Trying 172.16.1.1...
Connected to 172.16.1.1.
Escape character is '^]'.
220 FTP service ready.
^]
telnet> quit
Connection closed.
[root@centos6 scripts]# telnet 172.16.1.2 23
Trying 172.16.1.2...
Connected to 172.16.1.2.
Escape character is '^]'.
TL-AP301C login:
telnet> quit
Connection closed.
從上面的結果來看,腳本檢查的結果是正確,如果需要檢查整個網段只需要將定義IP變量時定義成“IP="172.16.1.0/24"”即可
看完了這篇文章,相信你對“Linux系統shell腳本編程的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。