[root@kongxl shell]# cat mod_ip_hostname.sh #!/bin/bash#Auto modify ip and hostname#by colin on 2015-05-07IP_CONFIG='/etc/sysconfig/network-scripts/ifcfg-eth0'HOSTNAME_CONFIG='/etc/sysconfig/network'HOSTS_CONFIG='/etc/hosts'#定义一个IP主要内容数组a=0 #定义变量a为数组的下标,动态使用的时候调用IP_ARRAY[a]IP_ARRAY=(IPADDRNATMASKGATEWAYdns1dns2)#判断IP是否符合标准规则function judge_ip(){ #这里local $1出错,用2>/dev/null屏蔽掉错误,暂未发现影响输出结果 local $1 2>/dev/null TMP_TXT=/tmp/iptmp.txt echo $1 > ${TMP_TXT} IP_ADDR=`grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' ${TMP_TXT}` #判断有没有符合***.***.***.***规则的IP if [ ! -z "${IP_ADDR}" ];then local j=0; #通过循环来检测每个点之前的数值是否符合要求 for ((i=1;i<=4;i++)) do local IP_NUM=`echo "${IP_ADDR}" |awk -F. "{print $"$i"}"` #判断IP_NUM是否在0与255之间 if [ "${IP_NUM}" -ge 0 -a "${IP_NUM}" -le 255 ];then ((j++)); else return 1 fi done #通过j的值来确定是否继续匹配规则,循环四次,若都正确j=4. if [ "$j" -eq 4 ];then #确认是否为自己想要输入的IP地址 read -n 1 -p "输入${IP_ARRAY[a]}的值是${IP_ADDR},确认输入:Y|y;重新输入:R|r:" OK case ${OK} in Y|y) rm -rf ${TMP_TXT} ; return 0;; R|r) return 1;; *) return 1;; esac else return 1 fi else return 1 fi}#取得正确的IP值#通过调用函数judge_ip,变量IP_ADDR的最终值就是正确的function read_right_IP(){ read -p "请输入${IP_ARRAY[a]}的值:" IP_ADDRS# IP_ADDRS="" judge_ip "${IP_ADDRS}"; i=`echo $?` #循环直到输入正确的IP为止 until [ "$i" -eq 0 ];do echo -e "\033[31m\n你输入了错误的${IP_ARRAY[a]}值:${IP_ADDRS} ====>>>>\033[0m" read -p "重新输入${IP_ARRAY[a]},请输入:" IP_ADDRS judge_ip "${IP_ADDRS}"; i=`echo $?` done}#判断网卡配置文件,存在就备份,不存在则新建一个空白文件function chang_ip(){ if [ -f ${IP_CONFIG} ];then cp ${IP_CONFIG} ${IP_CONFIG}.bak #网卡的MAC地址 HW_ADDR=`grep 'HWADDR' ${IP_CONFIG}` #IP配置状态 DHCP_STATUS=`grep 'BOOTPROTO' ${IP_CONFIG} |awk -F= '{print toupper($2)}'` #如果BOOTPROTO的值是DHCP,就继续设置IP,否则退出呢 if [ "${DHCP_STATUS}" = 'DHCP' ];then echo -e "\033[32mIP获取方式为:${DHCP_STATUS},下面将修改为静态IP...\033[0m" rm -rf ${IP_CONFIG} && touch ${IP_CONFIG};#把部分基本信息导入到网卡配置文件内cat >${IP_CONFIG} <> ${IP_CONFIG} done echo -e "\033[32m\n+++++++设置的IP相关信息如下+++++++\033[1m" cat ${IP_CONFIG}; echo -e "\033[32m\n++++++++++++++++++++++++++++++++++\033[0m" else echo -e "\033[32m系统IP已经是:${DHCP_STATUS},无须修改...\033[0m" fi else echo -e "\033[31m网卡配置文件:${IP_CONFIG}不存在,请检查系统是否被破坏...\033[0m" fi}#脚本选择菜单menu=( chang_ip_config chang_hostname_config chang_hosts_confg exit_menu help_menu)PS3="Please select menu will running to do (Need help,Please input: 5 ): "select i in ${menu[@]}do case $i in ${menu[0]}) chang_ip if [ "$?" -eq 0 ];then echo -e "\033[32m修改IP为静态获取成功...\033[0m" else echo -e "\033[31m请检查IP是否为静态获取...\033[0m" fi ;; ${menu[1]}) exit ;; ${menu[2]}) exit ;; ${menu[3]}) exit ;; ${menu[4]}) echo -e "\033[32m=========帮助菜单内容如下==========\033[0m" for ((i=0;i<"${#menu[@]}";i++)) do echo -e "\033[33m `expr $i + 1`) ${menu[i]} \033[0m" done ;; esacdone
更多内容请关注:shell-scripts脚本修改IP地址
http://www.jfedu.net/forum.php?mod=viewthread&tid=1776&fromuid=100
(出处: Linux运维培训-京峰Linux教育官网)脚本运行效果图示: