Skip to content

Latest commit

 

History

History
69 lines (57 loc) · 1.67 KB

46.md

File metadata and controls

69 lines (57 loc) · 1.67 KB

题目要求

写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务:

1)使用格式:getinterface.sh [-i interface | -I ip]

2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项时,显示其指定ip所属的网卡。

例: sh getinterface.sh -i eth0 或者

sh getinterface.sh -I 192.168.0.1

3)当用户使用除[-i | -I]选项时,显示[-i interface | -I ip]此信息。

4)当用户指定信息不符合时,显示错误。(比如指定的eth0没有,而是eth1时)

参考答案

#!/bin/bash
ip add |awk -F ': ' '$1 ~ "^[1-9]" {print $2}' > /tmp/ifs.txt
get_ip()
{
    ip add show dev $1 |grep inet |awk '{print $2}' |awk -F '/' '{print $1}'
}

for eth in `cat /tmp/ifs.txt`
do
    myip=`get_ip $eth`
    if [ -z "$myip" ]
    then
	echo $eth 
    else
	echo $eth $myip 
    fi
done > /tmp/if_ip.txt 

if [ $# -ne 2 ]
then
    echo "请输入正确的格式: bash $0 -i 网卡 或者 bash $0 -I ip"
    exit
fi

if [ $1 == "-i" ]
then
    if awk '{print $1}' /tmp/if_ip.txt |grep -qw $2
    then
	eth=$2
	ip1=`awk -v aeth=$eth '$1==aeth' /tmp/if_ip.txt|sed "s/$eth //"`
        echo "网卡$2的ip是 $ip1"
    else
	echo "你指定的网卡不对,系统中的网卡有:`cat /tmp/ifs.txt|xargs`"
	exit
    fi
elif [ $1 == "-I" ]
then
    if grep -qw " $2 "  /tmp/if_ip.txt
    then
	eth=`grep -w " $2 " /tmp/if_ip.txt|awk '{print $1}'`
        echo "IP $2对应的网卡是$eth"
    else
	echo "你指定的ip不对,系统中的IP有:`ip add |grep inet |awk '{print $2}'|awk -F '/' '{print $1}'|xargs`"
	exit
    fi
else
    echo "请输入正确的格式: bash $0 -i 网卡 或者 bash $0 -I ip"
fi