REDHAT|Centos IPV4地址配置一键化脚本
说明:该脚本依赖于ifconfig工具与nmcli工具,故仅支持redhat 7|Centos 7以上版本
#!/bin/bash
# shellcheck disable=SC1091#
. /etc/init.d/functions
#声明索引数组
declare -a eth_name_list
#获取网卡名称
eth_name_list=$(ifconfig |sed -rn "s/(.*):.*/\1/p"|grep -v "[lo|^ ]")
#查看是否有nmcli软件
rpm -qa | grep -q -i "NetworkManager" || { action "没有nmcli" false;exit; }
#获取当前设备名称和IP地址
eth_list()
{
#通过网卡名称获取IP地址和掩码
a=0
for i in $eth_name_list;do
IP_config="$(ifconfig "$i" |grep -E -o "([1-9]{1,3}[.]){3}[0-9]{1,3}"|awk 'NR>1{print p}{p=$0}')"
for j in $IP_config;do
Net_num[$a]=$j
(( a++ ))
done
done
#形成列表列表
n=0
for k in $eth_name_list;do
for (( m=$n;m<$a-1;m+=1 ));do
echo "网卡名称:$k,IP地址:${Net_num[$m]};掩码:${Net_num[$m+1]}"
break
done
(( n+=2 ))
done
}
#输出网卡目录
echo -e "已启用网卡:\n$eth_name_list"
echo "显示当前已使用的网卡信息(未配置IP的不获取)"
eth_list
#获取网卡名称
read -r -p "input network name:" Net_name
#判断变量是否为空值
if [ -n "$Net_name" ];then
#判断网卡是否存在
awk -F":" 'NR>=3{print $1}' < /proc/net/dev |sed -rn 's/ +(.*)/\1/p'|grep -q "$Net_name" &&\
action "网卡存活" || { action "网卡存活" false;exit; }
#网卡模式:静态IP和自动获取
read -r -p "input model(manual|auto):" Model
case "$Model" in
manual|Manual)
#获取IP地址,并判断格式是否合法
read -r -p "input ipaddr:" IP
if [ -n "$IP" ] && [[ "$IP" =~ ([0-9]{1,3}[.]){3}[0-9]{1,3} ]];then
action "IP地址格式" || { action "IP地址格式" false;exit; }
fi
#生成网关
Gatway="${IP%.*}.1"
#使用nmcli命令配置IP
nmcli con modify "$Net_name" ipv4.addresses "$IP"/24 ipv4.method "$Model" gw4 "$Gatway" && \
#激活网卡
nmcli con up "$Net_name" &>/dev/null && \
action "配置成功"
;;
auto)
#使用nmcli命令配置静态模式
nmcli con modify "$Net_name" ipv4.method "$Model" && \
#激活网卡
nmcli con up "$Net_name" &>/dev/null && \
action "配置成功"
;;
*)
action "输入错误" false
echo "Usage:(please input manual|auto)"
;;
esac
else
echo "请输入值"
fi