【Shell实战案例面试题】输入网卡的名字,来输出网卡的IP

news2024/11/20 0:27:22

1.问题

  • 参数后判断要加""

  • 名字为空时显示ip

2.分析

  • 把本机的所有网卡名列出来,来引导用户输入

  • 使用命令列出所有网卡信:ifconfig/ip a

  • 设计一个函数,把网卡名作为参数,函数返回网卡的IP

  • 在获取某个网卡IP时,考虑网卡有多个IP地址(或为空IP的网卡)

3.实现

①添加网卡

②查看结果

③配置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的错,但并没有影响结果

4.改进代码

①代码

[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

②结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1418814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis面试(三)

1.Redis报内存不足怎么处理 Redis内存不足的集中处理方式: 修改配置文件redis.cof的maxmemory参数,增加Redis的可用内存通过命令修改set maxmemory动态设置内存上限修改内存淘汰策略,及时释放内存使用Redis集群,及时进行扩容 2…

基于springboot的美发管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

让Unity迭代器性能提升5倍

最近在研究Unity il2cpp的代码生成和编译优化,结合之前遇到过的一个优化案例,给大家讲讲在Unity中迭代器相关代码生成的底层原理,以及在写代码过程中需要注意的一些特殊情况。 案例 首先我们来看一个非常简单的案例,代码如下&am…

3338 蓝桥杯 wyz的数组IV 简单

3338 蓝桥杯 wyz的数组IV 简单 //C风格解法1&#xff0c;通过率50% #include<bits/stdc.h>int main(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int n; std::cin >> n;int ans 0;std::vector<int>a(n);for(auto &am…

Docker本地部署APITable结合内网穿透实现公网访问

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c;是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

【C语言】socket编程接收问题

一、recv()函数接收到的返回值为0表示对端已经关闭 在TCP套接字编程中&#xff0c;通过recv()函数接收到的返回值为0通常表示对端已经关闭了套接字的发送部分。这是因为TCP是一个基于连接的协议&#xff0c;其中有定义明确的连接建立和终止流程&#xff1b;当对端调用close()或…

C语言指针进阶(1)(超详细)

前言&#xff1a; 指针其实就是地址&#xff0c;而凡是存储在内存中的值都会有属于自己的地址&#xff0c;指针指向地址&#xff0c;这样我们就能通过指针间接操作变量。我们在指针初阶中介绍了指针的基本概念&#xff1a;如指针大小、野指针问题、指针间的关系运算等&#xff…

Hugging Face创始人分享:企业如何在ChatGPT浪潮下实现战略布局

Hugging Face创始人兼首席执行官 Clem Delangue在IBM一年一度的 THINK大会中研讨了当前人工智能发展趋势&#xff0c;特别是ChatGPT模型以及其对行业的影响。他的演讲还涉及到一个关键的议题&#xff0c;在ChatGPT这样的通用模型出现后&#xff0c;企业如何在人工智能领域找到自…

自定义vue通用左侧菜单组件(未完善版本)

使用到的技术: vue3、pinia、view-ui-plus 实现的功能: 传入一个菜单数组数据,自动生成一个左侧菜单栏。菜单栏可以添加、删除、展开、重命名,拖动插入位置等。 效果预览: 代码: c-menu-wrap.vue <template><div class="main-container">&l…

【嵌入式学习】C++QT-Day3-C++基础

笔记 见我的博客&#xff1a;https://lingjun.life/wiki/EmbeddedNote/19Cpp 作业 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函…

当包容结构体遇见灵活的内存管理

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;c语言从基础到进阶 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于c语言的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到小田代码世界~ &#x…

课时7:shell基础_shell简介

1.3.1 shell简介 学习目标 这一节&#xff0c;我们从 运维、shell语言、小结 三个方面来学习。 运维 简介 运维是什么&#xff1f;所谓的运维&#xff0c;其实就是公司的内部项目当中的一个技术岗位而已&#xff0c;它主要做的是项目的维护性工作。它所涉及的内容范围非常…

方法、数组

方法 是语句的集合&#xff0c;在一起执行一个功能 它是解决一类问题的步骤的有序集合 包含于类或对象中 在程序中创建&#xff0c;在其他地方被引用 设计方法的原则&#xff1a;方法的本意是功能块&#xff0c;就是实现某一个功能的语句块的集合。设计时&#xff0c;最好保持…

基于go mod模式创建项目最佳实践

希望能带给你成功的喜悦&#xff01; 除go get、vendor这两种方式外&#xff0c;Go版本在1.11之后推出了go module模式来管理依赖&#xff0c;使用go mod时下载的依赖文件在$GOPATH/pkg/mod/下。本文以两种办法介绍如何创建go mod项目。 目录 goland开启玩法 本地手动创建项目…

###C语言程序设计-----C语言学习(6)#

前言&#xff1a;感谢老铁的浏览&#xff0c;希望老铁可以一键三连加个关注&#xff0c;您的支持和鼓励是我前进的动力&#xff0c;后续会分享更多学习编程的内容。 一. 主干知识的学习 1. while语句 除了for语句以外&#xff0c;while语句也用于实现循环&#xff0c;而且它…

shell脚本自动化备份网络设备配置教程

由于局域网内存在多台网络设备&#xff0c;如防火墙、路由器、交换机等&#xff0c;数量众多&#xff0c;且品牌不同&#xff0c;手工备份配置需要相当长的时间&#xff0c;现需要实现自动化导出备份配置。 经查询&#xff0c;该局域网内存在华为及阿尔卡特两种品牌&#xff0…

Android Studio 下载安装配置使用入门【2024年最新】

前言&#xff1a; Android Studio 是谷歌官方提供的主要集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为 Android 平台应用开发而设计。它基于 JetBrains 的 IntelliJ IDEA 软件&#xff0c;并在此基础上增加了大量针对 Android 开发的定制功能。Android Studio 通过…

CMake 完整入门教程(一)

1 前言 每一次学习新东西都是很有乐趣的&#xff0c;虽然刚开始会花费时间用来学习&#xff0c;但是实践证明&#xff0c;虽然学习新东西可能会花费一些时间&#xff0c;但是它们带来的好处会远远超过这些花费的时间。学习新东西是值得的&#xff0c;也是很有乐趣的。 网络上…

C语言二维数组的使用案列,来自C语言程序设计第五版本

感谢关注我的123个小伙伴&#xff0c;我会给大家带来更多的知识&#xff0c;但是C语言的学习&#xff0c;我准备今天学了这个月暂时停止更新了&#xff0c;下个月一号砸门又见面&#xff0c;休息两天弄其它的事情&#xff0c;也好几天没有看论文了。 二维数组的创建比较简单&am…

基于Python 爬虫的房地产数据可视化分析与实现

摘要&#xff1a; 过去&#xff0c;不管是翻阅书籍&#xff0c;还是通过手机&#xff0c;电脑等从互联网上手动点击搜索信息&#xff0c;视野受限&#xff0c;信息面太过于狭窄&#xff0c;且数据量大而杂乱&#xff0c;爆炸式信息的更新速度是快速且不定时的。要想手动获取到海…