指令碼編寫技巧
指令檔名命名規則
檔案名稱的字元包括
字母、數字、"."、"_"和"-", 注意:指令碼的檔案名稱命名不能以數字開頭。
指令檔名的命名,盡量使用英文單詞、片語或短句的縮寫。
指令碼版本管理:
指令碼作用.主要版本號.修改次數.shell類型
變數命名規範
變數名可以由數字和字母組成
變數名採用全部英文字元小寫方式
變數名稱盡量使用縮寫,最好不要超過6個字元
${變數名} 例:${port},${ipaddr}…
指令碼代碼注釋規範
指令碼代碼注釋可以使用"#"和";(分號)"兩種方式進行注釋。#一般由於描述性的注釋,旨在說明代碼的作用或怎麼使用。
而;通常用於樣本性的注釋,特別是在一些設定檔中常常會用到,因此我們沿用這兩種方式來對我們的指令碼進行注釋。
引用符號使用規範
盡量少用單引號
對極個特殊字元進行屏蔽特殊含義時,使用\(反斜線)進行屏蔽
使用帶引號進行屏蔽字元時,單引號內一般不適用其他引用符號,除非是列印特殊符號本身。
使用反引號進行執行一個shell命令時,反引號內一般加其他引用符號。
指令碼函數定義規範
變數名可以由數字和字母組成
使用駝峰命名法(從第二個單詞開始,每個單字首大寫)
名字盡量不使用縮寫,除非它是眾所周知的
名字可以有兩個或三個單片語成,但通常不應多於三個
文本輸出排版
第一天課後作業
1、grep "20081011" text.txt 取出這一天的資料
2、grep "200804" text.txt 取出這一個月的資料
3、grep "200806" text.txt | grep -v "-" 取出一個月的上漲資料
4、grep "200807" text.txt | grep -v "-" | wc -l 列出有幾天是上漲個數,帶統計
5、grep "200808" text.txt | sort -k5 -n | tail -1 判斷上漲,然後tail取最後一行
grep "200808" text.txt | sort -k5 -r |head -1 判斷上漲,然後head取第一行
6、grep "200810" text.txt | awk '{if($4>0){print $1,$5}}' 取出一月中上漲資料時間和上漲幅
7、grep "200811" text.txt | awk '{if($4>5 && $4<20){print $0}}' 判斷區間取出整行
指令碼代碼執行個體分析1
編寫一個shell指令碼,執行指令碼後自動ping以下地址:
192.168.1.1,192.168.1.31
以上IP地址直接寫在指令碼之中。執行完成後,
應顯示能夠ping通的IP地址和不能夠ping通的IP地址
#!/bin/bash
if ping 192.168.1.1 -c 1
then
echo "192.168.1.1 online"
else
echo "192.168.1.1 offline"
fi
if ping 192.168.1.31 -c 1
then
echo "192.168.1.31 online"
else
echo "192.168.1.31 offline"
fi
指令碼代碼執行個體分析2
修改分析1,但是從iplist.txt中讀取IP
#!/bin/bash
for ip in `cat iplist.txt`
do
if ping $ip -c 1
then
echo "${ip} online"
else
echo "${ip} offline"
fi
done
指令碼代碼執行個體分析3
修改分析2,去除無用的資訊
#!/bin/bash
for ip in `cat iplist.txt`
do
if ping $ip -c 1 >/dev/null 2>&1
then
echo "${ip} online"
else
echo "${ip} offline"
fi
done
指令碼代碼執行個體分析4
修改分析3,產生記錄
#!/bin/bash
>hoststatus.txt
for ip in `cat iplist.txt`
do
if ping $ip -c 1 >/dev/null 2>&1
then
echo "${ip} online" |tee -a hoststatus.txt
else
echo "${ip} offline" |tee -a hoststatus.txt
fi
done
指令碼代碼執行個體分析5
產生一個IP位址集區,產生255個IP,並修改分析4,實現多線程ping
#!/bin/bash
>iplist
for ip in `seq 1 255`
do
echo "192.168.1.${ip}" >>iplist
done
#!/bin/bash
>hoststatus.txt
>temp
fastping()
{
if ping ${1} -c 1 >/dev/null 2>&1
then
echo "${ip} online" |tee -a temp
else
echo "${ip} offline" |tee -a temp
fi
}
for ip in `cat iplist.txt`
do
fastping $ip &
done
wait
sort -t. -k4 -n temp >hoststatus.txt
rm temp
temp ./ping.sh 測試一個指令碼執行多久