在 bash 中创建一个数组并从中选择一个元素

在 bash 中创建一个数组并从中选择一个元素

我找到了这个

channel_map = {
    "2412" : 1,
    "2417" : 2,
    "2422" : 3,
    "2427" : 4,
    "2432" : 5,
    "2437" : 6,
    "2442" : 7,
    "2447" : 8,
    "2452" : 9,
    "2457" : 10,
    "2462" : 11,
    "2467" : 12,
    "2472" : 13,
    "2484" : 14
}

我该如何转换它,以便可以在 bash 脚本中使用它?

我想定义

$频道=11

并且脚本应该使用正确的频率。

我使用的命令例如是:

iw dev wlan0 ibss join $ESSID 2412 HT40+ fixed-freq $CELLID

答案1

我相信 rubo77 正在寻找的答案是:

/bin/sh – #!
通道映射[1]=2412
通道映射[2]=2417
通道映射[3]=2422
通道映射[4]=2427
通道映射[5]=2432
通道映射[6]=2437
通道映射[7]=2442
通道映射[8]=2447
通道映射[9]=2452
通道图[10]=2457
通道图[11]=2462
通道图[12]=2467
通道图[13]=2472
通道映射[14]=2484

通道=11
回显 ${channel_map[$channel]}

一种更紧凑的做法:

/bin/bash #!/bin/bash
通道图=(XYZZY 2412 2417 2422 2427 2432 2437 2442 2447 2452 2457 \
                   2462 2467 2472 2484)

通道=11
回显 ${channel_map[$channel]}

channel_map 是一个数组。XYZZY是占位符;它将被分配给channel_map[0]

答案2

如果您只是想从该文件中提取相应的数字,请尝试:

awk -v chan=$CHANNEL '{if($3 ~ chan","){gsub("\"","",$1);print $1}}' map

map您的输入文件在哪里,并$CHANNEL设置为您正在查找的频道。

答案3

不确定您的完整实施情况,但这是一种快速完成的方法。尽管正如@Paul所说 - 我所知道的大多数都采用频道号而不是频率:

#!/bin/bash

channel=${1:-"6"}   # Channel will equal the command line argument, default to "6" if empty.
let channel-=1      # This lets you specify 1 - 14 instead of the 0-13 base of an array

freq=(2412 2417 2422 nnnn)  # The channel values, 1-14

echo ${freq[${channel}]}

确保将其另存为 whatever.sh chmod +x whatever.sh。然后您只需键入./whatever.sh 4(从同一目录),上面的内容就会回显2427

相关内容