切換hosts的shell指令碼

2021-09-01 10:35:02 字數 2916 閱讀 6743

在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指令碼的時候,又會有乙個工作目錄,這樣就很容易混淆。...