Linux
Bash:遍歷字元串
我有一個
Vmac
儲存多個 MAC 地址值的變數,從wmic
呼叫中收集如下:Vmac=`wmic --delimiter="," --authentication-file=/path/to/file //IP-ADDR "Select AdapterType,MACAddress from Win32_NetworkAdapter" | grep "Ethernet" | awk -F, '{print $3}'| sort | uniq | tr '\n' ' '`
已經觀察到
Vmac
,對於不同的主機,變數中包含的值的數量在 1 到 5 的範圍內變化。我必須將它們中的每一個分開並將它們儲存到一個變數VmacN
中,其中 N 可以取 1 到 5 之間的值。對於某些主機,只能有一個 MAC 地址,因此它只有一個
Vmac1
可用。然而,具有 4 個 NIC(以及因此的 MAC 地址)的主機將具有Vmac1
、Vmac2
和.Vmac3``Vmac4
為了有效地對這些資訊進行表格化,我還需要將值儲存在
NA
變數VmacN
中,其中可用的 MAC 地址較少(例如,對於具有 1 個NIC的機器,Vmac1
將為是)。AA:BB:CC:DD``Vmac2``Vmac5``NA``Vmac5``NA
為此,我創建並測試了一段程式碼,如下:
if [ ! -z "$Vmac" ] then i=1 for mac in $Vmac do declare "Vmac${i}"="$mac" ((i++)) done fi printf "${Vmac1:-NA}"",""${Vmac2:-NA}"",""${Vmac3:-NA}"
輸出:
3C:40:20:52:41:53 88:51:FB:3F:0D:81 C8:CB:B8:CC:5F:D2,NA,NA
僅列印時
Vmac1
,它將列印整個 MAC 地址(即 的值Vmac
)。我想,我在迭代
Vmac
.如何遍歷包含字元串值的變數?
只需使用一個數組。例如:
## read the MACs into an array declare -a Vmac=( $(wmic --delimiter="," --authentication-file=/path/to/file \ //IP-ADDR "Select AdapterType,MACAddress from Win32_NetworkAdapter" | grep "Ethernet" | awk -F, '{print $3}'| sort | uniq | tr '\n' ' ' ) ## Add NAs as appropriate for((i=0;i<6;i++)); do [ -z "${Vmac[i]}" ] && Vmac[i]="NA" done
為了顯示:
#!/bin/bash declare -a vmac=( $(echo 3C:40:20:52:41:53 88:51:FB:3F:0D:81 C8:CB:B8:CC:5F:D2)) for((i=0;i<6;i++)); do [ -z "${vmac[i]}" ] && vmac[i]="NA" done echo "${vmac[@]}"
輸出:
3C:40:20:52:41:53 88:51:FB:3F:0D:81 C8:CB:B8:CC:5F:D2 NA NA NA