因工作需要,需要给部分国产电脑手动配置hosts,觉得每次操作命令去编辑修改hosts文件比较麻烦,所以稍稍研究了一下脚本修改,觉得其他人也可能用的上,在此写篇文章向大家解说一下。
实现效果:
1.自动去除需要删除的hosts的ip解析域名配置的所在行
2.在hosts文件首行插入ip解析域名的配置
3.提供通过API接口方式获取需要修改的内容插入hosts文件的解决思路
一、基础
1.hosts文件所在位置
cd /etc #hosts文件所在目录
2.shell脚本命名
test.sh #以.sh结尾
3.执行shell脚本
sudo bash test.sh
#sudo 以root权限执行后续命令
#bash 用以执行shell脚本,后面需跟需要执行的文件名
#需注意执行此命令需要进入test.sh所在的目录
二、脚本详解
1.假设hosts文件原有内容如下:
222.22.33.44 www.baidu.com
111.22.33.44 www.qq.com
172.0.0.1 localhost
...
2.假设我们删除原有的baidu、qq的解析,重新配置baidu、qq的解析,示例:
#!/bin/bash
#设置域名解析变量
ip1='245.38.22.11 www.baidu.com'
ip2='185.31.27.51 www.qq.com'
echo '正在为您配置域名解析...'
echo $ip1
echo $ip2
#判断域名是否重复配置并在首行插入解析
#存在已配置过的host,删除所在行,再重新插入
#不存在配置,在首行插入
if grep -q "www.baidu.com" /etc/hosts || grep -q "245.38.22.11" /etc/hosts;
then
echo "正在重置"$ip1'相关内容...';
sed -i '/www.baidu.com/'d /etc/hosts;
sed -i '/245.38.22.11/'d /etc/hosts;
sed -i '1i'"$ip1"'' /etc/hosts;
else
sed -i '1i'"$ip1"'' /etc/hosts
fi
if grep -q "www.qq.com" /etc/hosts || grep -q "185.31.27.51" /etc/hosts;
then
echo "正在重置"$ip2'相关内容...';
sed -i '/www.qq.com/'d /etc/hosts;
sed -i '/185.31.27.51/'d /etc/hosts;
sed -i '1i'"$ip2"'' /etc/hosts;
else
sed -i '1i'"$ip2"'' /etc/hosts
fi
echo '-------------------以下是配置完成的内容:---------------------------'
cat /etc/hosts
echo '已完成配置!'
3.执行脚本后,hosts文件内容:
245.38.22.11 www.baidu.com
185.31.27.51 www.qq.com
172.0.0.1 localhost
...
4.详解
#!/bin/bash -脚本前一般都加上这句话表示此文件为脚本内容
#设置域名解析变量 -以#号开头为注释内容不执行
ip1='245.38.22.11 www.baidu.com'
-以aaa='内容',效果等于设置变量,建议有空格或特殊内容使用""
echo $ip1 -执行过程输出一句话,此处为输出变量内容,获取变量值以$开头
cat /etc/hosts -查看文件内容,cat后面跟文件名,可以是从根目录开始的全路径加文件名
echo '已完成配置!' -输出''内的文字内容
if grep -q "www.baidu.com" /etc/hosts || grep -q "245.38.22.11" /etc/hosts;
-如果hosts文件包含www.baidu.com或者包含245.38.22.11;包含结果为true,不包含为false
then -当结果为true执行下面语句
sed -i '/www.baidu.com/'d /etc/hosts; -删除hosts文件包含www.baidu.com内容的行
sed -i '/245.38.22.11/'d /etc/hosts; -删除hosts文件包含245.38.22.11内容的行
sed -i '1i'"$ip1"'' /etc/hosts;
-在hosts文件的首行位置插入一行内容,1i表示第一行位置插入,包含空格和特殊内容请使用""
else -当结果为false执行下面语句
sed -i '1i'"$ip1"'' /etc/hosts
fi -if判断结束标识
5.API获取内容解决思路