Linux
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
它只是帶有空格的文本文件。行。腳本問,我想輸入什麼。我輸入了“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+
考慮製表符或其他以數字為前綴的空格:eth=`cat $interfaces_with_numbers | egrep "^\s+$number" | awk '{ print $2 }'