切换hosts的shell脚本

在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
fi

HOSTS="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() {
echo $1 | grep -E -q '([0-9]+\.){3}[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))
fi

isIp "$line"

if [[ $start_flag == 1 && $ip_result == 0 ]] ; then
# 去掉开头的注释符
line=${line/#\#/}
elif [[ $ip_result == 0 ]] ; then
# 在行开头添加注释符
if ! echo $line | grep -q '^ *#' ; then
line=\#$line
fi
fi
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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值