`
DiaoCow
  • 浏览: 244231 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

切换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 

在脚本的编写过程中,我经常使用这两个命令

sh -n shosts.sh online              # 检测脚本语法错误
sh -x shosts.sh online                 # 详细打出脚本每一步执行过程



分享到:
评论

相关推荐

    shell脚本实现同时多台远程主机执行命令的代码分享

    这时,使用shell脚本来实现并行执行命令可以显著提高效率。本文将详细介绍如何通过shell脚本实现同时多台远程主机执行命令的方法。 首先,为了实现无密码登录远程主机,需要设置SSH密钥对免密登录。可以通过`ssh-...

    一个shell for循环与case结合的脚本(监控程序状态)

    这里我们探讨的是如何使用shell脚本来实现这一功能,具体涉及到的关键技术是`for`循环和`case`语句。下面将详细介绍这两个核心元素以及它们在监控程序状态中的应用。 首先,`for`循环是Shell脚本中最常用的循环结构...

    Linux Shell小常识.pdf

    不仅如此,Shell还拥有自己的编程语言特性,允许用户编写复杂的脚本,实现自动化任务和任务的逻辑控制。 在Linux的安全管理方面,我们可以利用`hosts.allow`文件来控制网络访问。例如,在这个文件中加入特定的IP...

    Ansible脚本搭建K8s集群.pptx

    4. **测试Ansible**:通过命令`ansible all -m shell -a "hostname"`来测试Ansible是否安装成功并能够正确连接到目标主机。 #### 构建Kubernetes (K8s) 高可用集群 1. **准备工作**: - 确保所有节点安装了必要的...

    xiyoulinux

    - **Shell脚本编程**:Shell脚本是一种简单的脚本语言,主要用于自动化Linux系统的各种任务。 - **Shell简介**:Shell是Linux系统中的命令解释器,用户可以通过Shell与操作系统交互。 - **Shell的类型**:Linux系统...

    长春工程学院-嵌入式程序设计期末考试题

    17. **Shell脚本权限**:运行Shell脚本前需要给予脚本文件可执行权限,可以通过`chmod +x script.sh`命令设置。 18. **查看系统日志**:使用`last`命令显示当前已登录的用户列表。 19. **Ctrl+C信号**:发送SIGINT...

    Ansible离线安装文档

    离线安装需要预先准备Ansible及其所有依赖的安装包,并通过shell脚本一次性安装完成,大大简化了安装过程。 首先,离线安装的前提是准备好所有需要的软件包,包括Python、setuptools、pycrypto、yaml、PyYAML、...

    Linux从入门到精通.rar

    1. Bash脚本:学习编写简单的shell脚本,实现自动化任务,如备份、系统维护等。 2. 使用条件判断和循环结构,结合grep、sed和awk等工具进行数据处理。 八、版本控制系统 1. Git:理解Git的基本操作,如克隆、提交、...

    oracle install

    **1.1 检查/etc/hosts文件** - **目的**:确保服务器能够正确地识别其自身的名称,这对于网络通信至关重要。 - **操作**: - 打开`/etc/hosts`文件,并检查是否包含了正确的IP地址与主机名映射。例如: ```plain...

    linux实战常用命令

    - shell脚本的编写和执行,例如`#!/bin/bash`用于指定使用bash作为解释器。 9. 系统引导和故障处理 - `fsck`:文件系统检查,用于修复文件系统中的错误。 - 在系统启动时,常见的是按下特定的组合键(如Alt-F1...

    「Linux下如何限制Root用户进行远程登陆」.docx

    通过shell脚本判断用户是通过远程还是局域网登录。首先,获取登录用户的主机IP地址或主机名,然后在root的`.profile`文件中根据这个信息来决定是否允许登录。例如,如果用户通过IP地址为99.57.32.18的终端服务器登录...

    Linux运维-运维构架师-day12-基础模块.zip

    1. Bash脚本:学习编写Bash shell脚本,实现日常运维任务的自动化。 2. Cron定时任务:设置cron job执行定期任务,如备份、清理日志等。 六、高可用与集群 1. 负载均衡:了解Nginx、HAProxy等负载均衡器的配置和...

    Linux learning.rar

    六、Shell脚本编程 1. Bash基础知识:掌握变量、条件判断、循环结构等Bash脚本元素。 2. 脚本编写:编写简单的自动化脚本,提高工作效率。 3. 函数与数组:学习如何在脚本中使用函数和数组。 七、磁盘管理 1. 分区...

    《Linux基础教程》(第1版)课件

    - Shell函数:编写和调用Shell函数,提升脚本复用性。 通过《Linux基础教程》的配套课件学习,读者可以逐步建立起对Linux系统的全面认识,掌握日常操作技能,并为进一步的学习和开发打下坚实基础。

    UNIX操作系统基础使用手册

    在UNIX系统中,可以使用脚本语言(如Shell脚本)来自动化一系列命令。脚本通常以`.sh`扩展名保存,并通过`bash script.sh`来执行。 例如,一个简单的脚本示例: ```sh #!/bin/bash echo "Hello, World!" ``` 这个...

    linux系统学习笔记和资料

    1. Bash shell编程:了解shell脚本的基础语法,如变量、条件判断、循环、函数等。 2. 正则表达式:用于文本匹配和处理,如grep、sed、awk命令。 3. 进程间通信:管道(|)、重定向(>、<、>>)、子进程等概念。 七...

    AIX5上安装LR9

    切换至LoadRunner的bin目录下,运行`m_daemon_setup`脚本进行Agent的安装: ```sh cd /home/test/LoadRunner/bin ./m_daemon_setup Cinstall ``` 使用`ps auxf | grep m_agent_daemon`命令检查是否成功启动...

    华为内部LINUX学习资料

    - **2.2.1 vi 的进入与退出**: 使用 `vi <filename>` 打开文件,按 `Esc` 键切换到命令模式,然后使用 `:q` 或 `:q!` 退出。 - **2.2.2 vi 中显示行号**: 通过 `:set nu` 显示行号。 - **2.2.3 光标移动操作**: ...

Global site tag (gtag.js) - Google Analytics