我需要按数字获取接口。我的脚本:
#!/bin/bash
interfaces=/root/tt
interfaces_with_numbers=/root/tt2
ls -1 /sys/class/net > /root/tt
cat -n $interfaces > $interfaces_with_numbers
cat $interfaces_with_numbers
read number
echo $number
eth=`cat $interfaces_with_numbers | grep $number | awk '{ print $2 }'`
if [[ -d /sys/class/net/$eth ]];then
echo "You choose is: $eth"
else
echo "not found"
fi
我有输出:
1 dummy0
2 eno1
3 enp4s0
4 lo
5 virbr0
6 virbr0-nic
它只是带有空格的文本文件。好的。脚本问,我想输入什么。我输入了“2”。它正在工作 - 结果,我得到了接口的名称。我输入了“1”,但我“未找到”。我在linux命令行中写过:
cat tt2 | grep 1 | awk '{ print $2 }'
我得到了输出:
dummy0
eno1
如何正确执行此脚本?请帮忙。谢谢你的关注。
根据您选择的界面,grep 可能会找到多个答案。例如,选择菜单项 #1 将导致 grep 找到
1 dummy0
和2 eno1
。这导致从 grep 返回两个结果,它们由换行符分隔。例如:eth='dummmy0 eno1'
当
-d
尝试评估时eth
,它会尝试评估整个变量,包括回车,并且该语句显然返回 false。尝试使用 egrep 和正则表达式进行修复。^\s+$number
将仅在行首查找匹配项。将\s+
考虑制表符或其他以数字为前缀的空格:您可以用来
awk
准确检查匹配条件: