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

shell 檢測網段在線主機

寫一個shell腳本:
實現ping C類網段,B類網段和A類網段內的所有主機;
網段地址讓用戶輸入,而且通過腳本判斷網段類型;

  1. #!/bin/bash  
  2. #Author: MOS  
  3. #Script name: funPing.sh  
  4. #Date & Time: 2012-10-09/21:53:09  
  5. #Version: 1.0.1  
  6. #Description:  
  7. #  
  8. #定義C類網段處理函數  
  9. net_C(){  
  10. #定義統計不在線IP數量的變量  
  11.     declare -i Fail=0  
  12. #生成C類網的最後位IP,循環ping  
  13.     for i in `seq 1 254`;do  
  14. #ping只發送一個,只等待1秒,得到的所有信息並扔掉,僅去邏輯值  
  15.         if ping -c 1 -W 1 $1.$i &> /dev/null ;then   
  16.             echo "Online $1.$i" 
  17.         else 
  18.             let Fail++  
  19.         fi  
  20.     done  
  21.     echo "No Online PC, Number is $Fail" 
  22. }  
  23. net_B(){  
  24. #截取B類網的網段  
  25.     Bip=`echo $1|cut -d'.' -f1-2`  
  26.     declare -i Fail=0  
  27. #循環生成B類網第三段  
  28.     for i in `seq 0 254`;do  
  29.         Res="$Bip.$i" 
  30. #循環生成B類網第四段  
  31.         for r in `seq 1 254`;do  
  32.             if ping -c 1 -W 1 $Res.$r &> /dev/null ;then     
  33.                 echo "Online $Res.$r" 
  34.             else 
  35.                 let Fail++  
  36.             fi  
  37.         done  
  38.     done  
  39.     echo "No Online PC, Number is $Fail" 
  40. }  
  41. net_A(){  
  42.     Bip=`echo $1|cut -d'.' -f1`  
  43.     declare -i Fail=0  
  44. #生成A類網的第二段,第三段和第四段以此類推  
  45.     for i in `seq 0 254`;do  
  46.         Res="$Bip.$i" 
  47.         for r in `seq 0 254`;do  
  48.             Res1="$Res.$r" 
  49.             for l in `seq 1 254`;do  
  50.                 if ping -c 1 -W 1 $Res1.$l &> /dev/null ;then     
  51.                     echo "Online $Res1.$l" 
  52.                 else 
  53.                     let Fail++  
  54.                 fi  
  55.             done  
  56.         done  
  57.     done  
  58.     echo "No Online PC, Number is $Fail" 
  59. }  
  60. read -p "Please input subset:" Ip  
  61. #判斷輸入IP段落是否合法  
  62. if [[ $Ip =~ ^([2-9]|[1-9][0-9]|1[0-9][0-9]|2[01][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])$ ]];then 
  63. #合法,則取出第一個字段,屬於哪類網  
  64.     Mask=`echo "$Ip"|cut -d"." -f1`  
  65. #如果是A類網,則調用net_A函數,依次類推  
  66.     [ $Mask -lt 128 ] && net_A $Ip  
  67.     [ $Mask -lt 192 -a $Mask -gt 127 ] && net_B $Ip  
  68.     [ $Mask -gt 191 ] && net_C $Ip  
  69.  
  70. else 
  71. #如果輸入IP錯誤,則報錯信息如下  
  72. echo "Error! $Ip invalid." 
  73. fi  

如果要使用以上代碼,要慎重...尤其是A類網和B類網...255*255*255的資源開銷,您自己琢磨....呃,如果僅供測試的話,可以把結果輸出到文件,放到後台執行,或者僅測試特定IP的話,您可以把for循環中seq的生成數字,修改一下,也是沒問題的.....

Copyright © Linux教程網 All Rights Reserved