脚本说明
该脚本适用于Centos系列安装系统后,自动配置各类BOND和单个网卡网络信息
脚本内容
#!/bin/bash
NETCONFIG="/etc/sysconfig/network-scripts"
INTERFACE=(`cat /proc/net/dev | awk 'NR>2 && $1 !~/lo/ {gsub(/:/,"");print $1}'`)
BOND_MODE="1"
DEVICE="ens33,ens36"
IP="192.168.0.10/24"
GW="192.168.0.2"
DNS="114.114.114.114,8.8.8.8"
function INFO(){
echo -e "\033[32m $@ \033[0m"
}
function ERROR(){
echo -e "\033[41;37m $@ \033[0m"
}
function USAGE(){
INFO "------------------------------------------------------------------------------------------------------------------------"
ERROR "Unknow options: $@"
INFO " eg: "
INFO " bash bond.sh install"
INFO " bash bond.sh remove"
INFO "------------------------------------------------------------------------------------------------------------------------"
}
function BACKUP(){
if [ ! -d $NETCONFIG/BACKUP ]; then
mkdir -p $NETCONFIG/BACKUP
fi
if [ $BOND_MODE == "no" ]; then
TMP=(`echo $DEVICE | sed "s#,# #g"`)
if [ ${#TMP[@]} -ne 1 ]; then
ERROR "please input correct device num"
exit 1
fi
fi
for i in `echo $DEVICE | sed "s#,# #g"`
do
mv -f $NETCONFIG/ifcfg-$i $NETCONFIG/BACKUP &>/dev/null
done
}
function INSTALL(){
NUM=1
BACKUP
if [[ -z $BOND_MODE || -z $DEVICE || -z $IP ]]; then
ERROR "please edit BOND_MODE、DEVICE、IP"
fi
for i in `echo $DEVICE | sed "s#,# #g"`
do
if [[ ! "${INTERFACE[@]}" =~ $i ]]; then
ERROR "please input correct device name"
fi
done
if [[ $BOND_MODE == "0" || $BOND_MODE == "1" || $BOND_MODE == "2" || $BOND_MODE == "3" || $BOND_MODE == "4" || $BOND_MODE == "5" || $BOND_MODE == "6" ]]; then
for i in `echo $DEVICE | sed "s#,# #g"`
do
cat <<- EOF > $NETCONFIG/ifcfg-$i
NAME=$i
DEVICE=$i
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
SLAVE=yes
MASTER=bond0
NM_CONTROLLED=no
EOF
done
cat <<- EOF > $NETCONFIG/ifcfg-bond0
NAME=bond0
DEVICE=bond0
TYPE=Bond
BOOTPROTO=none
ONBOOT=yes
IPADDR=`echo $IP | awk -F'/' '{print $1}'`
PREFIX=`echo $IP | awk -F'/' '{print $2}'`
USERCTL=no
BONDING_MASTER=yes
NM_CONTROLLED=no
EOF
if [[ ! -z $GW ]]; then
echo "GATEWAY=$GW" >> $NETCONFIG/ifcfg-bond0
fi
if [[ ! -z $DNS ]]; then
for i in `echo $DNS | sed "s#,# #g"`
do
echo "DNS$NUM=$i" >> $NETCONFIG/ifcfg-bond0
let NUM+=1
done
fi
if [ $BOND_MODE == "0" ] ; then
echo 'BONDING_OPTS="miimon=1 updelay=0 downdelay=0 mode=balance-rr"' >> $NETCONFIG/ifcfg-bond0
elif [ $BOND_MODE == "1" ]; then
echo 'BONDING_OPTS="miimon=1 updelay=0 downdelay=0 mode=active-backup"' >> $NETCONFIG/ifcfg-bond0
elif [ $BOND_MODE == "2" ]; then
echo 'BONDING_OPTS="miimon=1 updelay=0 downdelay=0 mode=balance-xor"' >> $NETCONFIG/ifcfg-bond0
elif [ $BOND_MODE == "3" ]; then
echo 'BONDING_OPTS="miimon=1 updelay=0 downdelay=0 mode=broadcast"' >> $NETCONFIG/ifcfg-bond0
elif [ $BOND_MODE == "4" ]; then
echo 'BONDING_OPTS="miimon=1 updelay=0 downdelay=0 mode=802.3ad"' >> $NETCONFIG/ifcfg-bond0
elif [ $BOND_MODE == "5" ]; then
echo 'BONDING_OPTS="miimon=1 updelay=0 downdelay=0 mode=balance-tlb"' >> $NETCONFIG/ifcfg-bond0
elif [ $BOND_MODE == "6" ]; then
echo 'BONDING_OPTS="miimon=1 updelay=0 downdelay=0 mode=balance-alb"' >> $NETCONFIG/ifcfg-bond0
fi
elif [[ $BOND_MODE == "no" ]]; then
cat <<- EOF > $NETCONFIG/ifcfg-$DEVICE
NAME=$DEVICE
DEVICE=$DEVICE
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=`echo $IP | awk -F'/' '{print $1}'`
PREFIX=`echo $IP | awk -F'/' '{print $2}'`
NM_CONTROLLED=no
EOF
if [[ ! -z $GW ]]; then
echo "GATEWAY=$GW" >> $NETCONFIG/ifcfg-$DEVICE
fi
if [[ ! -z $DNS ]]; then
for i in `echo $DNS | sed "s#,# #g"`
do
echo "DNS$NUM=$i" >> $NETCONFIG/ifcfg-$DEVICE
let NUM+=1
done
fi
fi
service network restart
}
function REMOVE(){
mv -f $NETCONFIG/BACKUP/* $NETCONFIG/ &>/dev/null
rm -rf $NETCONFIG/ifcfg-bond0 && rm -rf $NETCONFIG/BACKUP
systemctl restart network
}
case $1 in
"install")
INSTALL
;;
"remove")
REMOVE
;;
*)
USAGE $@
;;
esac