赞
踩
参数后判断要加""
名字为空时显示ip
把本机的所有网卡名列出来,来引导用户输入
使用命令列出所有网卡信:ifconfig/ip a
设计一个函数,把网卡名作为参数,函数返回网卡的IP
在获取某个网卡IP时,考虑网卡有多个IP地址(或为空IP的网卡)
①添加网卡

②查看结果

③配置IP地址
- [root@openEuler1 ~]# nmcli connection modify ens160 +ipv4.addresses 1.1.1.1/24
- [root@openEuler1 ~]# nmcli connection modify ens160 +ipv4.addresses 2.1.1.1/24
- [root@openEuler1 ~]# nmcli connection up ens160
- Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
- [root@openEuler1 ~]# nmcli connection show
- NAME UUID TYPE DEVICE
- ens160 cf671928-9983-4a0f-8cf9-10ff6ddedb19 ethernet ens160
- [root@openEuler1 ~]# nmcli connection add type ethernet con-name ens224 ifname ens224 Connection 'ens224' (c11362f7-baa3-48be-98e4-d3e3e9d7b13a) successfully added.
- [root@openEuler1 ~]# nmcli connection modify ens224 ipv4.addresses 10.10.10.10/24
- [root@openEuler1 ~]# nmcli connection up ens224
- Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

④取网卡名、IP地址代码
- #方法一
- [root@openEuler1 ~]# ip a | awk -F"[: ]" '/[0-9]+:/ {print $3}' | grep -v "^$"
- lo
- ens160
- ens224
- ens256
- #方法二
- [root@openEuler1 ~]# ifconfig | awk -F":" '/^[a-z]+/ {print$1}'
- ens160
- ens224
- ens256
- lo
- [root@openEuler1 ~]# ip address show ens160 | tr -s " " | awk -F"[ /]" '/inet / {print $3}'
- 192.168.126.140
- 1.1.1.1
- 2.1.1.1

⑤实现脚本代码
- [root@openEuler1 ~]# vim ms1.sh
- #!/bin/bash
-
- ip a | awk -F"[: ]" '/^[0-9]+:/ {print $3}' > interface.txt
-
- get_ip()
- {
- if [ -n "$interface" ]
- then
- if grep -qw $interface interface.txt
- then
- ip a s $interface | tr -s " " | awk -F"[ /]" '/inet / {print $3}'
- break
- else
- echo "输入接口名错误"
- continue
- fi
- else
- echo "输入不能为空"
- continue
- fi
- }
-
- while true
- do
- read -p "请输入网络接口名:" interface
- get_ip
- done
-
- rm-rf interface.txt
- [root@openEuler1 ~]# chmod a+x ms1.sh
- [root@openEuler1 ~]# ./ms1.sh

⑥结果
注意:这个脚本会报break和continue的错,但并没有影响结果
①代码
- [root@openEuler1 ~]# vim ms1.sh
- #!/bin/bash
-
- # 获取所有网络接口名称并显示给用户
- get_interfaces() {
- echo "请选择以下网络接口之一以获取其 IP 地址:"
- ip link show | awk -F: '/^[0-9]+: / {print $2}' | tr -d ' '
- }
-
- # 根据网络接口名称获取 IP 地址
- get_ip_for_interface() {
- local interface=$1
- # 使用 ip 命令而不是 ifconfig,因为 ifconfig 在某些新系统上可能已被弃用
- ip a s $interface | tr -s " " | awk -F"[ /]" '/inet / {print $3}'
- }
-
- # 主程序
- main() {
- local interface
- # 调用函数显示所有网络接口
- get_interfaces
-
- # 循环直到用户输入有效的网络接口名称或选择退出
- while true; do
- # 读取用户输入
- read -p "请输入网络接口名或输入 exit 退出: " interface
- # 退出条件
- if [ "$interface" == "exit" ]; then
- break
- fi
-
- # 检查输入是否为空
- if [ -z "$interface" ]; then
- echo "输入不能为空,请重新输入。"
- continue
- fi
-
- # 调用函数获取并显示 IP 地址
- ips=$(get_ip_for_interface "$interface")
- if [ -z "$ips" ]; then
- echo "网络接口 $interface 没有找到 IP 地址。"
- else
- echo "网络接口 $interface 的 IP 地址是:"
- echo "$ips"
- fi
- done
- }
-
- # 执行主程序
- main

②结果

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。