Crea un array in bash e scegli un elemento al di fuori di esso


-1

ho trovato questo

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
}

come faccio a convertirlo, quindi posso usarlo in uno script bash?

Mi piacerebbe definire

$ CANALE = 11

e lo script dovrebbe usare la giusta frequenza.

il comando che uso è ad esempio:

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

1
Qual è il caso d'uso sottostante qui? Ogni comando linux che posso trovare prenderà direttamente il numero del canale, quindi usa la frequenza corretta senza che tu debba convertire. Cosa fa il tuo script?
Paul

Ho modificato il titolo per chiarire la mia materia
rubo77

Risposte:


1

Credo che la risposta che rubo77 sta cercando sia:

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

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

Un modo più compatto di farlo:

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

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

channel_map è un array. Il XYZZY è un segnaposto; sarà assegnato a channel_map[0].


questo non funziona più
rubo77

Ho modificato il modo compatto, ora funziona
rubo77

1

se stai solo cercando di estrarre il numero corrispondente da quel file, prova:

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

dove map è il tuo file di input, e $CHANNEL è impostato sul canale che stai cercando.


questo funziona anche per un file
rubo77

0

Non sono sicuro della tua piena implementazione, ma è un modo rapido per farlo. Anche se come ha detto @Paul, la maggior parte delle volte so di prendere il numero del canale piuttosto che la frequenza:

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

Assicurati di salvarlo come any.sh e chmod +x whatever.sh. Quindi puoi semplicemente digitare ./whatever.sh 4 (dalla stessa directory) e quanto sopra farà eco 2427

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.