Linux

Bash:遍歷字元串

  • March 13, 2015

我有一個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 地址)的主機將具有Vmac1Vmac2和.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

引用自:https://unix.stackexchange.com/questions/189945