网卡、IP互相查询
  JiJ96DoSHEh4 2023年11月19日 20 0
## 脚本来源:b站阿铭linux
## 脚本需求
## 一个脚本 脚本可以接受选项[i,I],完成下面任务
## 1)使用一下形式:xxx.sh[-i iterface | -I ip]
## 2)当使用-i选项时,显示指定网卡的p地址
## 当使用-I选项时,显示其指定p所属的网卡。
#例:sh xxx.sh -i ens160
##shxxx.sh -I 192.168.0.1
#3)当使用除[ -i | -I]选项时,显示[-i interface | -I ip]此信息
#4)当用户指定信息不符合时,显示错误。(比如指定的eth0没有,而是eth1

#!/bin/bash

## 创建打印脚本使用帮助的函数
useage(){
        echo "Please useage: $0 -i 网卡名字 or $0 -I ip地址"
}

## 当参数不等于2时,要提示脚本的使用帮助信息
if [ $# -ne 2 ]
then
        useage
        exit
fi


## 将本机所有网卡名字全部获取,暂时写到临时文件
ip add |awk -F ":" '$1 ~ /^[1-9]/ {print $2}' |sed 's/ //g' >/tmp/eths.txt

## 接下来会将本机所有网卡以及对应ip记录到eth_ip.log文件里
## 但在执行脚本时,会先看是否有该文件,有的话就删除掉
[ -f /tmp/eth_ip.log ] && rm -f /tmp/eth_ip.log

## 遍历网卡
for eth in `cat /tmp/eths.txt`
do
        ## 获取到网卡对应的IP地址
        ip=`ip add |grep -A2 ": $eth" |grep inet |awk '{print $2}' |cut -d '/' -f 1`
        echo "$eth:$ip" >> /tmp/eth_ip.log
done

## 删除临时文件
del_tmp_file()
{
        [ -f /tmp/eths.txt ] && rm -f /tmp/eths.txt ]
        [ -f /tmp/eth_ip.log ] && rm -f /tmp/eths.log ]
}

## 当提供的网卡名字错误时要报错
wrong_eth()
{
        if ! awk -F ':' '{print $1}' /tmp/eth_ip.log |grep -qw "^$1$"
        then
                echo "请指定正确的网卡名字"
                del_tmp_file
                exit
        fi
}

## 当提供的IP地址错误时要报错
wrong_ip()
{
        if ! awk -F ':' '{print $2}' /tmp/eth_ip.log |grep -qw "^$1$"
        then
                echo "请指定正确的ip地址"
                del_tmp_file
                exit
        fi
}


## 根据第一个参数来决定执行什么指令
case $1 in
        -i)
        wrong_eth $2
        grep -w $2 /tmp/eth_ip.log |awk -F ':' '{print $2}'
        ;;

        -I)
        wrong_ip $2
        grep -w $2 /tmp/eth_ip.log |awk -F ':' '{print $1}'
        ;;

        *)
        useage
        del_tmp_file
        exit
        ;;
esac

del_tmp_file

<<'COMMENT'
1)边写脚本,边调试
2)临时文件可以大大降低写shell脚本的难度,但不要忘记在脚本执行结束时删除掉
3) 巧用函数,减少冗余代码
4)grep -A2 ": ens32" 解释:会查找所有包含 : ens32 的行,并显示下面的两行(使用 -A2 参数)
5) cut -d '/' -f 1 会将每行的输出切割为几个字段(使用 / 作为分隔符),并打印第一个字段
6)grep -qw "^$1$" 解释:-q 参数使 grep 命令静默模式,不显示任何输出。而 -w 参数使得 grep 只匹配完整单词。然后 "^$1$" 是一个正则表达式,^ 表示开头
,$1 是变量,表示要匹配的内容,$ 表示结尾。所以 "^$1$" 表示完全匹配 $1 这个字符串。
COMMENT
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
  J4HOkDry6Dvp   2023年11月02日   41   0   0 封包SSLIP
  FPWXcwQsKvIB   2023年12月06日   53   0   0 IP数据统计TCP
JiJ96DoSHEh4
最新推荐 更多