我正在 Bash 中创建一个脚本来更改我 PC 的所有 MAC 地址。我可以用这个列出所有网络接口:
ip link | grep "<" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo
脚本的输出是:
eth0
wlan0
现在我需要为每个网络接口创建一个变量(以供将来使用),但我不知道如何,谷歌也没有帮助我......
我正在 Bash 中创建一个脚本来更改我 PC 的所有 MAC 地址。我可以用这个列出所有网络接口:
ip link | grep "<" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo
脚本的输出是:
eth0
wlan0
现在我需要为每个网络接口创建一个变量(以供将来使用),但我不知道如何,谷歌也没有帮助我......
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
标志来代替 grepping 字符。这将在单行上输出所有数据。然后你只需要没有:
字符的第二个单词。这在纯 bash 中非常简单:
interfaces=()
while read -r _ curInterface _; do
interfaces+=("${curInterface%:}")
done < <(ip -o link)
您可以从此输出创建一个数组,然后循环遍历它。
my_array=( $(ip link | grep "<" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo) )
您也可以这个例子给出不同的选择将输出重定向到数组
将输出存储在数组中:
interfaces=( $(ip link | awk '/</ { print $2 }' | awk -F: '!/lo/ {print $1}') )
我可以用一个 awk 命令让它变得更简单:
readarray -t youravar < <(exec ip link | awk -F': ' '/^[0-9]+:/&&!/ lo: /{print $2}')