利用for循環完成你的第一個腳本
腳本涉及內容:
ping -c# IP :向目標IP發送#個包,測試是否可達。
命令狀態結果:
成功:0 失敗:1-255
說明:當你執行完成一條命令時,使用echo $?即可測試命令是否成執行,如果返回0則表示你的命令執行成功了,如果返回值為1-255的數值,則表示你的命令執行失敗。
示例
[root@smokeping etc]# ls -d /etc
/etc
[root@smokeping etc]# echo $?
0
[root@smokeping etc]# echo $?
127
bash的測試類型:
數值測試:
-gt:是否大於;
-ge:是否大於等於;
-eq:是否等於;
-ne:是否不等於;
-lt:是否小於;
-le:是否小於等於;
這裏我們需要用到-eq來測試echo $?的值是否等於0,來檢驗我們的命令是否成完成了。
輸出重定向:COMMAND > NEW_POS, COMMAND >> NEW_POS
>:覆蓋重定向,目標文件中的原有內容會被清除;
>>: 追加重定向,新內容會追加至目標文件尾部;
說明:腳本中我們需要將存在IP輸出到一個文本,將不存在的IP輸出到另一個文本。
腳本測試:
[root@smokeping tmp]# bash -x ping.sh
說明:測試腳本執行,可詳細的顯示出腳本錯誤在哪一步,誰用誰知道。
以上內容結合if與for即可。 好了,上腳本。
#!/bin/bash
for i in 172.20.16.{1..255}
do
{
ping -c2 $i &> /dev/null
if [ $? -eq 0 ];then
echo $i>>huo.txt
else
echo $i>>si.txt
fi
}
done
在調試腳本過程中遇到了些問題,如if後邊空格,以及條件測試中[ $? -eq 0 ]
的空格等等,都是些小細節,希望大家多多注意。
最後更新:2017-10-23 10:33:39