linux菜鳥日記(4)
使用一個簡單的for循環和if判斷語句實現某個網段內所有ping所有客戶機的shell程序:
for i in {1..254} do if ping -c 1 192.168.10.${i} >/dev/null 2>&1; then echo " ${i}通" else echo "${i}未通 " fi done
在這里i是一個循環變量,一共循環254次,${i}相當于192.168.10.0這個網段中從1~254的主機號。
for循環開始然后進行if判斷:
判斷 ping 192.168.10.xxx這個網段中的所有主機號中如果是標準輸出就 ">"(重定向到)/dev/null這個文件中
then 如果是標準輸出 那么就顯示 ${i}(這個主機)通
"2>&1" 表示錯誤輸出同樣重定向到/dev/null文件下
else 如果是錯誤輸出 那么就顯示${i}(這個主機)不通
在這段程序中 ping -c 1 表示每個主機只ping一次。
這段程序中主要的點就是 ”192.168.10.${i} >/dev/null 2>&1“
首先要明白 dev下的null文件有什么用。這個null文件相當于windows下的回收站,但是在這個null中的東西是無法恢復的。
在這里ping 每個客戶機時如果有返回值也就是ping通了,那么就屬于一個標準輸出這個標準輸出就把他丟到 /dev/null中 如果不這樣做你ping的返回數據會占用系統的某個空間。 在這里所有標準輸出都會是1 而 2就表示錯誤輸出 ,&符號表示等同于 “2>&1” 這里就表示 錯誤輸出 等同于 標準輸出(不代表 錯誤輸出 等于 標準輸出) 這樣才能將錯誤輸出也放到/dev/null中。
通過這樣一個for循環加if判斷就能實現ping所有主機號并返回一個 通 或者 沒通 的信息。

浙公網安備 33010602011771號