切换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
重复执行shshosts.shonline不会有任何问题
我们在尝试切换成线下环境
[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
在脚本的编写过程中,我经常使用这两个命令
sh-nshosts.shonline#检测脚本语法错误
sh-xshosts.shonline#详细打出脚本每一步执行过程
相关推荐
huha 2020-10-16
laisean 2020-11-11
大牛牛 2020-10-30
firefaith 2020-10-30
liguojia 2020-10-20
wangzhaotongalex 2020-10-20
以梦为马不负韶华 2020-10-20
JohnYork 2020-10-16
Julyth 2020-10-16
applecarelte 2020-10-16
laisean 2020-09-27
flycappuccino 2020-09-27
liguojia 2020-09-27
wangzhaotongalex 2020-09-22
流年浅滩 2020-10-23
liujianhua 2020-10-22
woaimeinuo 2020-10-21
tufeiax 2020-09-03
laisean 2020-09-01
vvu 2020-09-16
libao 2020-09-16
Yyqingmofeige 2020-08-18
zhushixia 2020-08-17