国产电脑shell脚本修改hosts文件

因工作需要,需要给部分国产电脑手动配置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获取内容解决思路

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值