歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

【要求】

檢測局域網下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.   
  4. network="192.168.0"  
  5. totalup=0  
  6. totaldown=0  
  7. for ipadd in $(seq 1 100)  
  8. do  
  9.         ping -c 1 -w 1 ${network}.${ipadd} &>/dev/null && result=0 || result=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.         fi  
  17. done  
  18. echo "The uping PC has ${totalup}"  
  19. 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.   
  4. network="192.168.0"  
  5. totalup=0  
  6. totaldown=0  
  7. for ipadd in $(seq 1 100)  
  8. do  
  9.         ping -c 1 -w 1 ${network}.${ipadd} &>/dev/null && result=0 || resul  
  10. t=1  
  11.         if [ "$result" == 0 ]; then  
  12.                 echo "PC ${network}.${ipadd} is UP."  
  13.                 totalup=$((${totalup}+1))  
  14.         else  
  15.                 echo "PC ${network}.${ipadd} is DOWN."  
  16.                 totaldown=$((${totaldown}+1))  
  17.                 echo -e "WARNNING:The PC (ip:${network}.${ipadd}) have down!!! \n `date`" | mail -s root 郵箱                    fi  
  18. done  
  19. echo "The uping PC has ${totalup}"  
  20. echo "The downing PC has ${totaldown}"  

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

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

Copyright © Linux教程網 All Rights Reserved