Tạo một mảng trong bash và chọn một phần tử trong số đó


-1

tôi đã tìm thấy cái này

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
}

Làm thế nào để tôi chuyển đổi cái này, vì vậy tôi có thể sử dụng cái này trong một tập lệnh bash?

Tôi muốn xác định

$ KÊNH = 11

và tập lệnh nên sử dụng đúng tần số.

lệnh tôi sử dụng là ví dụ:

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

1
Trường hợp sử dụng cơ bản ở đây là gì? Mỗi lệnh linux tôi có thể tìm thấy sẽ lấy số kênh trực tiếp và do đó sử dụng tần số chính xác mà bạn không cần phải chuyển đổi. Kịch bản của bạn làm gì?
Paul

Tôi đã chỉnh sửa tiêu đề để làm rõ chủ đề của mình
rubo77

Câu trả lời:


1

Tôi tin rằng câu trả lời rubo77 đang tìm kiếm là:

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

kênh = 11
lặp lại $ {channel_map [$ channel]}

Một cách nhỏ gọn hơn để làm điều đó:

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

kênh = 11
lặp lại $ {channel_map [$ channel]}

channel_map là một mảng. Đây XYZZYlà một giữ chỗ; nó sẽ được gán cho channel_map[0].


việc này không còn hiệu quả nữa
rubo77

Tôi đã chỉnh sửa cách nhỏ gọn, bây giờ nó hoạt động
rubo77

1

nếu bạn chỉ muốn lấy số tương ứng từ tệp đó, hãy thử:

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

maptập tin đầu vào của bạn ở đâu và $CHANNELđược đặt thành kênh bạn đang tìm kiếm.


cái này cũng hoạt động với một tập tin
rubo77

0

Không chắc chắn về việc triển khai đầy đủ của bạn, nhưng là một cách nhanh chóng để hoàn thành nó .. Mặc dù như @Paul đã nói - hầu hết tôi biết về việc lấy số kênh thay vì Tần số:

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

Hãy chắc chắn để lưu nó như bất cứ điều gì .sh và chmod +x whatever.sh. Sau đó, bạn có thể chỉ cần gõ ./whatever.sh 4(từ cùng một thư mục) và ở trên sẽ lặp lại2427

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.