LINUX Shell指令碼程式設計例項詳解(一)上

smallcolzacio發表於2018-08-22

LINUX Shell指令碼程式設計例項詳解(一)上

ping命令測試網段內主機的2例詳解

使用linux已經有10來年了但是一直止於各種伺服器的搭建和環境的調優,能力不能得到提升,今天突然下定決心學習Shell指令碼程式設計,因此以網上廣為流傳的《Shell指令碼100例》為基礎學習、實驗和筆記。

廢話不說上栗子。

使用vim shell100-scanip-1.sh命令建立指令碼檔案

#!/bin/bash
for i in {1..254}
do
        ping -c2 -i0.3 -W1 192.168.18.$i &>/dev/null
        if [ $? -eq 0 ];then
                echo "192.168.18.$i is up"
        else
                echo "192.168.18.$i is down"
        fi
done

解釋:

第一句 #!/bin/bash

在shell指令碼的開頭往往有一句話來定義使用哪種sh直譯器來解釋指令碼。
目前研傳送測的shell指令碼中主要有以下兩種方式:
(1) #!/bin/sh
(2) #!/bin/bash

止於使用sh還是bash來解釋的區別後邊抽時間專門寫一篇文章,這裡不在詳述

第二句 for i in {1..254}

            do

            ......

           done

是迴圈結構,for迴圈類似程式中的for迴圈,i為迴圈變數,迴圈變數值在in{}裡依次迴圈,迴圈體從do開始,done結束。

第三句ping -c2 -i0.3 -W1 192.168.18.$i &>/dev/null

ping命令引數

-c2:設定完成要求迴應的次數;這裡設定為2是考慮網路路由的問題導致第一次ping不能返回而第二次ping可以返回的情況(具體原因請自行閱讀網路原理)

-i0.3:指定收發資訊的間隔時間(秒計),這裡的時間是綜合考慮ping命令返回超時的時間和每次ping的時間,原則應為:返回超時<i引數<ping命令傳送間隔。

-W1:即超時時間(毫秒計),這裡表示超時時間為1毫秒,也就是說一毫秒後ping命令結束。

&>/dev/null :表示將標準輸出stdout和標準錯誤輸出stderr重定向到null的裝置中,也就是說不列印到螢幕上了,而且也不儲存檔案(放到名叫null的裝置中——無底洞永遠消失)。

第四句判斷語句

if [ $? -eq 0 ];then
           ......     
        else
         ......       
        fi

if判斷語句 [ ]中為判斷表示式,$?表示最後執行是否成功,成功為0 不成功為1

第五句、第六句

echo "192.168.18.$i is up"、echo "192.168.18.$i is down"表示回顯到螢幕上$i表示當前i變數的值

栗子1解釋完畢,待續

 

相關文章