Linux

bash 中的腳本不能正常工作

  • November 15, 2016

我需要按數字獲取介面。我的腳本:

#!/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 dummy02 eno1。這導致從 grep 返回兩個結果,它們由換行符分隔。例如:

eth='dummmy0 eno1'

-d嘗試評估時eth,它會嘗試評估整個變數,包括輸入,並且該語句顯然返回 false。嘗試使用 egrep 和正則表達式進行修復。^\s+$number將僅在行首查找匹配項。將\s+考慮製表符或其他以數字為前綴的空格:

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

引用自:https://serverfault.com/questions/815029