Shell脚本中获取本机ip地址

1.单网卡

方法1:

#!/bin/sh
local_ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"​`
echo "${local_ip}"

命令解释: 

ifconfig -a        		//和window下执行此命令一样道理,返回本机所有ip信息
grep inet		    	//截取包含ip的行
grep -v 127.0.0.1		//去掉本地指向的那行
grep -v inet6			//去掉包含inet6的行
awk { print $2}			//$2 表示默认以空格分割的第二组 同理 $1表示第一组​
tr -d "addr:"			//删除"addr:"这个字符串

方法2:

ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}'

 

2. 多网卡

当多网卡时,会出现多个不同网段的IP 

例如:服务器器有172.17.0.1和172.24.7.44网段的IP,根据不同网段的IP地址打印不同的输出,shell脚本如下:

#!/bin/sh
local_ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"​`
echo "${local_ip}"

for var in ${local_ip[@]}
do
  echo "多网卡IP:$var"
done

array=(`echo $local_ip | tr '\n' ' '` ) 
num=${#array[@]}                          #获取数组元素的个数。
echo "IP数目:$num"
for var in ${array[@]}
do
  echo "ip:$var"
done

功能:多网卡时,根据序号选择对应的IP地址

#!/bin/sh

function getIpAddr(){
	# 获取IP命令
	ipaddr=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"​`
	array=(`echo $ipaddr | tr '\n' ' '` ) 	# IP地址分割,区分是否多网卡
	#array=(172.20.32.214 192.168.1.10);
	num=${#array[@]}  						#获取数组元素的个数

	# 选择安装的IP地址
	if [ $num -eq 1 ]; then
		#echo "*单网卡"
		local_ip=${array[*]}
	elif [ $num -gt 1 ];then
		echo -e "\033[035m******************************\033[0m"
		echo -e "\033[036m*    请选择安装的IP地址		\033[0m"
		echo -e "\033[032m*      1 : ${array[0]}		\033[0m"
		echo -e "\033[034m*      2 : ${array[1]} 		\033[0m"
		echo -e "\033[035m******************************\033[0m"
		#选择需要安装的服务类型
		input=""
		while :
		do
			read -r -p "*请选择安装的IP地址(序号): " input
			case $input in
				1)
					local_ip=${array[0]}
					#echo "选择网段1的IP为:${local_ip}"
					break
					;;
				2)
					local_ip=${array[1]}
					#echo "选择网段2的IP为:${local_ip}"
					break
					;;
				*)
				echo "*请输入有效的数字:"
					;;
			esac
		done
	else
		echo -e "\033[31m*未设置网卡IP,请检查服务器环境! \033[0m"
		exit 1
	fi
} 

# 校验IP地址合法性
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
}

local_ip=''
getIpAddr	#自动获取IP
isValidIp ${local_ip}	# IP校验
if [ $? -ne 0 ]; then
	echo -e "\033[31m*自动获取的IP地址无效,请重试! \033[0m"
	exit 1
fi
echo "*选择安装的IP地址为:${local_ip}"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值