我正在Bash中创建一个脚本来更改我PC的所有MAC地址。我可以用这个列出所有网络接口:
ip link | grep "<" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo
脚本的输出是:
eth0
wlan0
现在我需要为每个网络接口创建一个变量(将来使用它),但我不知道怎么做,Google也没有帮助我......
答案 0 :(得分:3)
readarray -t interfaces < <(ip link | grep "<" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo)
echo "${interfaces[0]}" # prints eth0
echo "${interfaces[1]}" # prints wlan0
要循环使用for
:
for curInterface in "${interfaces[@]}"; do
echo "$curInterface"
done
首先,您可以使用<
标记,而不是点击-o
字符。这将输出单行的所有数据。然后你只需要没有:
字符的第二个单词。这在纯粹的bash中非常简单:
interfaces=()
while read -r _ curInterface _; do
interfaces+=("${curInterface%:}")
done < <(ip -o link)
答案 1 :(得分:0)
您可以从此输出创建一个数组,并在之后遍历它。
my_array=( $(ip link | grep "<" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo) )
您也可以使用这种替代方案redirect output to array
答案 2 :(得分:0)
将输出存储在数组中:
interfaces=( $(ip link | awk '/</ { print $2 }' | awk -F: '!/lo/ {print $1}') )
答案 3 :(得分:0)
我可以用一个awk命令让它更简单:
readarray -t youravar < <(exec ip link | awk -F': ' '/^[0-9]+:/&&!/ lo: /{print $2}')