直接上代码
根据实际情况可修改默认配置文件名称,测试时建议注释掉重启步骤,测试无误后再放开
#!/bin/bash
# 定义的一些常量
ETHPATH='/etc/sysconfig/network-scripts/'
DEFAULTFILE='ifcfg-ens33'
# 定义方法
function sedTxt() {
local old=$1
local old_=^$1.*
local new=$2
local path=$3
grep -q "${old}" $path && sed -i "s/${old_}/${new}/g" $path || echo "${new}" >> $path
}
function checkExit() {
local input=$1
if [ "$input" == "exit" ] || [ $"$input" == "EXIT" ] || [ "$input" == "quit" ] || [ "$input" == "QUIT" ]; then
echo "您放弃了修改,再见"
exit 0
fi
}
function isValidIp() {
local ip=$1
local ret=1
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
ip=(${ip//\./ }) # 按.分割,转成数组,方便下面的判断
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
ret=$?
fi
return $ret
}
# 打印配置目录
ls --color=auto ${ETHPATH}
read -p "请输入需要修改的配置文件(默认${DEFAULTFILE}):" confFile
checkExit $confFile
if [ "$confFile" == "" ]
then
confFile=$DEFAULTFILE
fi
ETHFILE=$ETHPATH$confFile
if [ ! -f "$ETHFILE" ]; then
echo "${ETHFILE}不存在!"
exit 0
fi
echo "${ETHFILE}的内容如下:"
cat ${ETHFILE}
while :
do
#修改IP地址
read -p "输入IP地址:" IP
checkExit $IP
if [ ! $IP ]; then
echo "输入地址为空, 请重新输入!"
fi
if isValidIp $IP; then
GATEWAY=${IP%.*}.1
echo "IP地址修改预览如下:"
echo "ONBOOT=yes"
echo "BOOTPROTO=static"
echo "NETMASK=255.255.255.0"
echo "IPADDR=${IP}"
echo "GATEWAY=${GATEWAY}"
echo "DNS1=114.114.114.114"
read -p "是否写入${conf}文件(y/n) ENTER 确认:" write
checkExit $write
if [ "$write" == "" ] || [ "$write" == "Y" ] || [ "$write" == "y" ]; then
sedTxt "ONBOOT" "ONBOOT=yes" ${ETHFILE}
sedTxt "BOOTPROTO" "BOOTPROTO=static" ${ETHFILE}
sedTxt "NETMASK" "NETMASK=255.255.255.0" ${ETHFILE}
sedTxt "IPADDR" "IPADDR=${IP}" ${ETHFILE}
sedTxt "GATEWAY" "GATEWAY=${GATEWAY}" ${ETHFILE}
sedTxt "DNS1" "DNS1=114.114.114.114" ${ETHFILE}
# 重启网卡
echo "开始重启网卡."
service network restart
echo "网卡重启成功."
else
echo "您放弃了修改,再见"
fi
break
else
echo "$IP 不是有效ip地址, 请重试."
fi
done