【要求】
檢測局域網下192,168.0.1~192.168.0.100之間所有主機的存活狀態。並統計up和down主機的個數。
【分析】
使用linux的ping命令進行檢測
使用for循環獲取所需檢測的IP地址
用if語句進行結果判斷並統計up和down主機個數
【腳本】
- #!/bin/bash
- ## Use ping command to check the network's PC state.
-
- network="192.168.0"
- totalup=0
- totaldown=0
- for ipadd in $(seq 1 100)
- do
- ping -c 1 -w 1 ${network}.${ipadd} &>/dev/null && result=0 || result=1
- if [ "$result" == 0 ]; then
- echo "PC ${network}.${ipadd} is UP."
- totalup=$((${totalup}+1))
- else
- echo "PC ${network}.${ipadd} is DOWN."
- totaldown=$((${totaldown}+1))
- fi
- done
- echo "The uping PC has ${totalup}"
- echo "The downing PC has ${totaldown}"
【心得】
首先將IP分割為192.168.0 和最後一位,通過for循環進行枚舉。具體的1~100數值可通過bash內置命令seq來實現。
在ping命令進行判斷時將stdout 和stderr丟棄,並且在成功ping通時將result進行賦值0,否側將result賦值為1
通過if 語句進行result值的判斷,統計up和down的主機個數,並輸出。
【擴展】
假設加入檢測到主機down機後通過mail發送給管理員進行通知:
腳本如下:
- #!/bin/bash
- ## Use ping command to check the network's PC state.
-
- network="192.168.0"
- totalup=0
- totaldown=0
- for ipadd in $(seq 1 100)
- do
- ping -c 1 -w 1 ${network}.${ipadd} &>/dev/null && result=0 || resul
- t=1
- if [ "$result" == 0 ]; then
- echo "PC ${network}.${ipadd} is UP."
- totalup=$((${totalup}+1))
- else
- echo "PC ${network}.${ipadd} is DOWN."
- totaldown=$((${totaldown}+1))
- echo -e "WARNNING:The PC (ip:${network}.${ipadd}) have down!!! \n `date`" | mail -s root 郵箱 fi
- done
- echo "The uping PC has ${totalup}"
- echo "The downing PC has ${totaldown}"
然後可以在/etc/crontab中加入任務計劃,比如每5分鐘檢測一次。
*/5 * * * * (腳本絕對路徑)