Cree una matriz en bash y elija un elemento de ella

-1

encontré esto

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
}

¿Cómo convierto esto, para poder usar esto en un script bash?

Me gustaria definir

$ CANAL = 11

y el script debe usar la frecuencia correcta.

El comando que uso es, por ejemplo:

iw dev wlan0 ibss join $ESSID 2412 HT40+ fixed-freq $CELLID
rubo77
fuente
1
¿Cuál es el caso de uso subyacente aquí? Todos los comandos de Linux que puedo encontrar tomarán el número de canal directamente, por lo que usarán la frecuencia correcta sin necesidad de convertir. ¿Qué hace tu guión?
Paul
Edité el título para aclarar mi tema
rubo77

Respuestas:

1

Creo que la respuesta que busca rubo77 es:

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

canal = 11
echo $ {channel_map [$ channel]}

Una forma más compacta de hacerlo:

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

canal = 11
echo $ {channel_map [$ channel]}

channel_map es una matriz. El XYZZYes un marcador de posición; se le asignará a channel_map[0].

Scott
fuente
esto ya no funciona
rubo77
Edité la forma compacta, ahora funciona
rubo77
1

Si solo está buscando extraer el número correspondiente de ese archivo, intente:

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

dónde mapestá su archivo de entrada y $CHANNELestá configurado para el canal que está buscando.

nulorevolución
fuente
esto también funciona para un archivo
rubo77
0

No estoy seguro de su implementación completa, pero como una forma rápida de lograrlo ... Aunque, como dijo @Paul, la mayoría sé de tomar el número de canal en lugar de la frecuencia:

#!/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}]}

Asegúrese de guardarlo como whatever.sh y chmod +x whatever.sh. Luego puede escribir ./whatever.sh 4(desde el mismo directorio) y lo anterior hará eco2427

nerdwaller
fuente