在web開發中,我們經常需要切換hosts繫結,比較好用工具火狐外掛程式:hostadmin.
今天突發奇想(最近看了很多shell,也想鍛鍊一下),仿照hostadmin寫了乙個shell指令碼,目前執行良好。
#!/bin/bash
##############################
# 切換hosts的工具類 swich hosts
## --------hosts 檔案格式--------
# ==offline
# ip list...
# ==offline
## ==online
# ip list...
# ==online
# --------hosts 檔案格式--------
# # 操作:sh shosts.sh offline 開啟offline這組host繫結
## diaocow 2012-9-8
###############################
# 檢測使用者是否輸入了group tag
if [[ -z $1 ]] ; then
echo "error: please input a group tag! eg. offline"
exit 1
fihosts="testdata" # hosts檔案(這裡,你需要替換成/etc/hosts)
hosts_temp="host.tmp" # hosts臨時檔案
group_tag="==$1" # 需要開啟的組
# 檢測group tag有效性
if ! grep -q "$group_tag" "$hosts" ; then
echo "error: there is no group tag named $group_tag in $hosts"
exit 1
fi# 函式:判斷字串是否為ip
isip() [0-9]'
ip_result=`echo $?`
}# clean臨時檔案
: > $hosts_temp
# group tag 計數
start_flag=0
# 處理hosts
cat $hosts | while read line ; do
if echo $line | grep -q $group_tag; then
start_flag=$((start_flag + 1))
fiisip "$line"
if [[ $start_flag == 1 && $ip_result == 0 ]] ; then
# 去掉開頭的注釋符
line=$
elif [[ $ip_result == 0 ]] ; then
# 在行開頭新增注釋符
if ! echo $line | grep -q '^ *#' ; then
line=\#$line
fifi
echo "$line" >> $hosts_temp
done
# 重新生成hosts
cat $hosts_temp > $hosts
rm -rf $hosts_temp
現在我們來測試下這個指令碼:
我們準備下測試資料(指令碼中的hosts變數指定hosts檔案,目前我們暫定義為testdata):
[diaocow@ubuntu]$ cat testdata
==offline
72.51.30.13 offline.test1.com
72.20.123.321 offline.test2.com
==offline
==online
12.56.92.97 online.test1.com
12.56.38.84 online.test2.com
==online
將host切換到線上環境
[diaocow@ubuntu]$ sh shosts.sh online
[diaocow@ubuntu]$ cat testdata
==offline
#72.51.30.13 offline.test1.com
#72.20.123.321 offline.test2.com
==offline
==online
12.56.92.97 online.test1.com
12.56.38.84 online.test2.com
==online
重複執行 sh shosts.sh online 不會有任何問題
我們在嘗試切換成線下環境
[diaocow@ubuntu]$ sh shosts.sh offline
[diaocow@ubuntu]$ cat testdata
==offline
72.51.30.13 offline.test1.com
72.20.123.321 offline.test2.com
==offline
==online
#12.56.92.97 online.test1.com
#12.56.38.84 online.test2.com
==online
一切ok :)
在指令碼的編寫過程中,我經常使用這兩個命令
[b]sh -n shosts.sh online # 檢測指令碼語法錯誤
sh -x shosts.sh online # 詳細打出指令碼每一步執行過程
[/b]
shell指令碼 如何切換當前目錄
指令碼中執行其他目錄的指令碼或者命令,可以用 連線兩條命令,當前面命令執行正常時,才執行後面命令 比如 cd root replace scripts run.out cd root replace scripts b.sh 記得許可權 例子vi srv msc ubicreate rootfs t...
通過shell指令碼監控日誌切換頻率
在資料庫遇到效能問題的時候,可能從io,cpu等角度能夠下手找到效能瓶頸,日誌的切換也是影響效能的乙個因素,如果日誌切換臺頻繁,等待時間就會在日誌相關的事件上,從資料庫的角度來說,肯定是io的瓶頸。可以通過如下的shell指令碼來得到乙個簡單的報告。指令碼如下 sqlplus s db conn s...
python呼叫shell指令碼時需要切換目錄
最近遇到了乙個問題,就是python 呼叫shell指令碼時,發現輸入輸出的檔案,總是和自己預想的有偏差,但是單獨在linux下執行命令的時候,卻沒有錯誤。後來發現是相對路徑的問題,因為執行python檔案的時候,會有乙個工作目錄,而執行shell指令碼的時候,又會有乙個工作目錄,這樣就很容易混淆。...