我找到了这个
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