主機是否存活,主要是ping它的ip地址,如果能夠ping通則表示主機在網絡中存活,但是我們不能一棍子打死,只給一次機會,一次不通就判定主機網絡不通,有可能是因為網絡質量的關系,偶爾丟包,這個不能斷定主機的存活狀態,次實驗連續三次失敗才斷定主機非存活。
一、失敗次數的值判定方法
腳本如下:
#!/bin/bash net="192.168.0." for i in {1..254};do for count in {1..3};do ping -c1 -W1 $net$i &> /dev/null if [ $? -eq 0 ];then echo "$net$i is live !" break else if [ $count -eq 3 ];then #通過循環的次數來確定失敗的次數,這里如果已經循環到第3次了,就表示連續3次沒有ping通,則判定主機died echo "$net$i is died !" fi fi done done

二、通過變量的方式
腳本如下:
#!/bin/bash while read ip do fail_count=0 #定義一個變量並富裕一個初始值0,用來記錄ping失敗的次數。 for i in {1..3};do ping -c1 -w1 $ip &> /dev/null if [ $? -eq 0 ];then echo "$ip is live !" break else let fail_count++ #每ping失敗一次就給fail_count變量自加1 fi done if [ $fail_count -eq 3 ];then #判斷失敗次數如果等於3,就認定這個主機地址died。 echo "$ip is died !" fi done<ip.txt #輸入重定向的方式獲取ip地址,這個腳本就需要在腳本文件的當前目錄存在一個ip.txt的文件,里面放的是要測試的ip地址,一行一個ip。

第二種方法其實和第一種是一樣的。
三、用函數的方法
腳本如下:
#!/bin/bash ping_sucess() { ping -c1 -W1 $ip &> /dev/null if [ $? -eq 0 ];then echo "$ip is live !" continue fi } while read ip do ping_sucess ping_sucess ping_sucess echo "$ip is died !" done < ip.txt
下方圖片中少了最后一個echo。請注意。懶得再截圖了,字太多。

三種方法中我個人覺得第一種最好理解,但是最后一種是最優的,雖然效果,都是一樣的。這三種方法有一個缺點就是執行的時間比較長,如果有好的方法,請大師指點。
