在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脚本实现同时多台远程主机执行命令的方法。 首先,为了实现无密码登录远程主机,需要设置SSH密钥对免密登录。可以通过`ssh-...
这里我们探讨的是如何使用shell脚本来实现这一功能,具体涉及到的关键技术是`for`循环和`case`语句。下面将详细介绍这两个核心元素以及它们在监控程序状态中的应用。 首先,`for`循环是Shell脚本中最常用的循环结构...
不仅如此,Shell还拥有自己的编程语言特性,允许用户编写复杂的脚本,实现自动化任务和任务的逻辑控制。 在Linux的安全管理方面,我们可以利用`hosts.allow`文件来控制网络访问。例如,在这个文件中加入特定的IP...
4. **测试Ansible**:通过命令`ansible all -m shell -a "hostname"`来测试Ansible是否安装成功并能够正确连接到目标主机。 #### 构建Kubernetes (K8s) 高可用集群 1. **准备工作**: - 确保所有节点安装了必要的...
- **Shell脚本编程**:Shell脚本是一种简单的脚本语言,主要用于自动化Linux系统的各种任务。 - **Shell简介**:Shell是Linux系统中的命令解释器,用户可以通过Shell与操作系统交互。 - **Shell的类型**:Linux系统...
17. **Shell脚本权限**:运行Shell脚本前需要给予脚本文件可执行权限,可以通过`chmod +x script.sh`命令设置。 18. **查看系统日志**:使用`last`命令显示当前已登录的用户列表。 19. **Ctrl+C信号**:发送SIGINT...
离线安装需要预先准备Ansible及其所有依赖的安装包,并通过shell脚本一次性安装完成,大大简化了安装过程。 首先,离线安装的前提是准备好所有需要的软件包,包括Python、setuptools、pycrypto、yaml、PyYAML、...
1. Bash脚本:学习编写简单的shell脚本,实现自动化任务,如备份、系统维护等。 2. 使用条件判断和循环结构,结合grep、sed和awk等工具进行数据处理。 八、版本控制系统 1. Git:理解Git的基本操作,如克隆、提交、...
**1.1 检查/etc/hosts文件** - **目的**:确保服务器能够正确地识别其自身的名称,这对于网络通信至关重要。 - **操作**: - 打开`/etc/hosts`文件,并检查是否包含了正确的IP地址与主机名映射。例如: ```plain...
- shell脚本的编写和执行,例如`#!/bin/bash`用于指定使用bash作为解释器。 9. 系统引导和故障处理 - `fsck`:文件系统检查,用于修复文件系统中的错误。 - 在系统启动时,常见的是按下特定的组合键(如Alt-F1...
通过shell脚本判断用户是通过远程还是局域网登录。首先,获取登录用户的主机IP地址或主机名,然后在root的`.profile`文件中根据这个信息来决定是否允许登录。例如,如果用户通过IP地址为99.57.32.18的终端服务器登录...
1. Bash脚本:学习编写Bash shell脚本,实现日常运维任务的自动化。 2. Cron定时任务:设置cron job执行定期任务,如备份、清理日志等。 六、高可用与集群 1. 负载均衡:了解Nginx、HAProxy等负载均衡器的配置和...
六、Shell脚本编程 1. Bash基础知识:掌握变量、条件判断、循环结构等Bash脚本元素。 2. 脚本编写:编写简单的自动化脚本,提高工作效率。 3. 函数与数组:学习如何在脚本中使用函数和数组。 七、磁盘管理 1. 分区...
- Shell函数:编写和调用Shell函数,提升脚本复用性。 通过《Linux基础教程》的配套课件学习,读者可以逐步建立起对Linux系统的全面认识,掌握日常操作技能,并为进一步的学习和开发打下坚实基础。
在UNIX系统中,可以使用脚本语言(如Shell脚本)来自动化一系列命令。脚本通常以`.sh`扩展名保存,并通过`bash script.sh`来执行。 例如,一个简单的脚本示例: ```sh #!/bin/bash echo "Hello, World!" ``` 这个...
1. Bash shell编程:了解shell脚本的基础语法,如变量、条件判断、循环、函数等。 2. 正则表达式:用于文本匹配和处理,如grep、sed、awk命令。 3. 进程间通信:管道(|)、重定向(>、<、>>)、子进程等概念。 七...
切换至LoadRunner的bin目录下,运行`m_daemon_setup`脚本进行Agent的安装: ```sh cd /home/test/LoadRunner/bin ./m_daemon_setup Cinstall ``` 使用`ps auxf | grep m_agent_daemon`命令检查是否成功启动...
- **2.2.1 vi 的进入与退出**: 使用 `vi <filename>` 打开文件,按 `Esc` 键切换到命令模式,然后使用 `:q` 或 `:q!` 退出。 - **2.2.2 vi 中显示行号**: 通过 `:set nu` 显示行号。 - **2.2.3 光标移动操作**: ...