不要在bash中正确运行脚本

我需要通过号码获取界面。 我的脚本

#!/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 

它只是带有空格的文本文件。 好。 脚本问,我想要input。 我input了“2”。 它正在工作 – 结果,我得到接口的名称。 我input了“1”,而我却没有find。 我已经写在Linux命令行中:

 cat tt2 | grep 1 | awk '{ print $2 }' 

我已经得到了输出:

 dummy0 eno1 

如何做到这个脚本正确? 请帮忙。 感谢您的关注。

根据您select的接口,grep可能会find多个答案。 例如,select菜单项#1将导致grepfind1 dummy02 eno1 。 这导致从grep返回的两个结果由一个换行符分隔。 例如:

eth='dummmy0 eno1'

-d尝试评估eth ,它会尝试评估整个variables,包括回车符,并且语句显然返回false。 尝试使用egrep与正则expression式进行修复。 ^\s+$number只会在匹配行的开头。 \s+将会在数字前加上制表符或其他空格:

 eth=`cat $interfaces_with_numbers | egrep "^\s+$number" | awk '{ print $2 }' 

您可以使用awk来检查匹配条件:

 eth=`awk "(\$1==$number) { print \$2 }" $interfaces_with_numbers`