歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 【bash】通過實踐學習bash之檢測局域網主機狀態

【bash】通過實踐學習bash之檢測局域網主機狀態

日期:2017/3/1 10:17:07   编辑:Linux編程

【要求】

檢測局域網下192,168.0.1~192.168.0.100之間所有主機的存活狀態。並統計up和down主機的個數。

【分析】

使用linux的ping命令進行檢測

使用for循環獲取所需檢測的IP地址

用if語句進行結果判斷並統計up和down主機個數

【腳本】

  1. #!/bin/bash
  2. ## Use ping command to check the network's PC state.
  3. network="192.168.0"
  4. totalup=0
  5. totaldown=0
  6. for ipadd in $(seq 1 100)
  7. do
  8. ping -c 1 -w 1 ${network}.${ipadd} &>/dev/null && result=0 || result=1
  9. if [ "$result" == 0 ]; then
  10. echo "PC ${network}.${ipadd} is UP."
  11. totalup=$((${totalup}+1))
  12. else
  13. echo "PC ${network}.${ipadd} is DOWN."
  14. totaldown=$((${totaldown}+1))
  15. fi
  16. done
  17. echo "The uping PC has ${totalup}"
  18. 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發送給管理員進行通知:

腳本如下:

  1. #!/bin/bash
  2. ## Use ping command to check the network's PC state.
  3. network="192.168.0"
  4. totalup=0
  5. totaldown=0
  6. for ipadd in $(seq 1 100)
  7. do
  8. ping -c 1 -w 1 ${network}.${ipadd} &>/dev/null && result=0 || resul
  9. t=1
  10. if [ "$result" == 0 ]; then
  11. echo "PC ${network}.${ipadd} is UP."
  12. totalup=$((${totalup}+1))
  13. else
  14. echo "PC ${network}.${ipadd} is DOWN."
  15. totaldown=$((${totaldown}+1))
  16. echo -e "WARNNING:The PC (ip:${network}.${ipadd}) have down!!! \n `date`" | mail -s root 郵箱 fi
  17. done
  18. echo "The uping PC has ${totalup}"
  19. echo "The downing PC has ${totaldown}"

然後可以在/etc/crontab中加入任務計劃,比如每5分鐘檢測一次。

*/5 * * * * (腳本絕對路徑)

Copyright © Linux教程網 All Rights Reserved