|
bash - zmienna tablicowa
kuleczek - 27-02-2008 20:35
Witam, plik cell. txt wyglada nastepujaco:
cat cell.txt Cell 01 - Address: 00:08:A1:AF:CE:FC Cell 02 - Address: 00:08:A1:AF:CA:98 Cell 03 - Address: 00:90:4C:7E:00:29 Cell 04 - Address: 00:19:5B:BC:DF:EF Cell 05 - Address: 00:15:E9:0D:30:60 Cell 06 - Address: 00:06:25:98:41:C4 ESSID:"mechaniczny rządzi !!!! chwasty" ESSID:"MISIAKI" ESSID:"aurelia" ESSID:"KACZOR" ESSID:"kazek" ESSID:"dom"
Stworzylem zmienna tablicowa w ten sposob:
tab_sieci=(`cat /home/lukasz/cell.txt`)
Chcialbym, zeby kolejne wiersze pliku byly kolejnymi elementami tablicy, tymczasem:
echo ${tab_sieci[0]} echo ${tab_sieci[1]}
daje taki rezultat: Cell 01
itd... Jak to zmienic? Poza tym, czy sie da sie jakos usunac spacje z poczatkow wszytskich wierszy? I jak polaczyc wiersz 1 z 6, 2 z 7 itd.? Z gory dziekuje za pomoc.
- 27-02-2008 21:39
Chcialbym, zeby kolejne wiersze pliku byly kolejnymi elementami tablicy
No to masz:
#!/bin/bash
numer=0 while read linia; do declare tab_sieci["$numer"]="$linia" numer="$(( ++numer ))" done< cell.txt
I jak polaczyc wiersz 1 z 6, 2 z 7 itd.?
To pomyśl nad tym, by dane do pliku był zapisywane w ten sposób aby nie było to potrzebne.
Pozdrawiam
kuleczek - 27-02-2008 23:48
Dzieki. Co do drugiego to nie mam pojecia jak to zrobic (narazie to jest 2x uzyty grep z przekierowaniem), ale bede walczyl.
- 27-02-2008 23:51
Dzieki. Co do drugiego to nie mam pojecia jak to zrobic (narazie to jest 2x uzyty grep z przekierowaniem), ale bede walczyl.
A z czego i w jaki sposób zapisujesz ten plik?
kuleczek - 28-02-2008 00:09
#!/bin/sh iwlist eth1 scan > sieciwifi.txt grep 'Cell' sieciwifi.txt > cell.txt grep 'ESSID' sieciwifi.txt >> cell.txt
Na razie doszedlem do tego, ze moze zrobic 2 pliki cell.txt i essid.txt i ich wiersze przypisac do tablic i dalej jakos nimi operowac, tzn. moze latwiej bedzie wysiwtelic cell + mac + essid w jednej linii.
- 28-02-2008 00:13
Daj wynik z
iwlist eth1 scan
to pomyślimy jak to ładniej zapisać w jeden plik :)
kuleczek - 28-02-2008 00:17
Prosze bardzo :) laptop:/home/lukasz# iwlist eth1 scan eth1 Scan completed : Cell 01 - Address: 00:08:A1:AF:CE:FC ESSID:"mechaniczny rzondzi !!!! chwasty" Protocol:IEEE 802.11bg Mode:Master Channel:1 Frequency:2.412 GHz (Channel 1) Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality=51/100 Signal level=-78 dBm Noise level=-78 dBm Extra: Last beacon: 764ms ago Cell 02 - Address: 00:1B:11:F9:0F:6E ESSID:"ChudyWiFi" Protocol:IEEE 802.11bg Mode:Master Channel:6 Frequency:2.437 GHz (Channel 6) Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality=31/100 Signal level=-90 dBm Noise level=-90 dBm IE: WPA Version 1 Group Cipher : TKIP Pairwise Ciphers (1) : TKIP Authentication Suites (1) : PSK Extra: Last beacon: 8624ms ago Cell 03 - Address: 00:1B:11:9B:99:4C ESSID:"Markowskiego_8" Protocol:IEEE 802.11bg Mode:Master Channel:6 Frequency:2.437 GHz (Channel 6) Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality=43/100 Signal level=-83 dBm Noise level=-83 dBm Extra: Last beacon: 5992ms ago Cell 04 - Address: 00:08:A1:AF:CA:98 ESSID:"MISIAKI" Protocol:IEEE 802.11bg Mode:Master Channel:13 Frequency:2.472 GHz (Channel 13) Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality=54/100 Signal level=-76 dBm Noise level=-76 dBm Extra: Last beacon: 436ms ago Cell 05 - Address: 00:19:5B:BC:DF:EF ESSID:"KACZOR" Protocol:IEEE 802.11bg Mode:Master Channel:6 Frequency:2.437 GHz (Channel 6) Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality=37/100 Signal level=-87 dBm Noise level=-87 dBm IE: WPA Version 1 Group Cipher : TKIP Pairwise Ciphers (1) : TKIP Authentication Suites (1) : PSK Extra: Last beacon: 8620ms ago Cell 06 - Address: 00:15:E9:0D:30:60 ESSID:"kazek" Protocol:IEEE 802.11bg Mode:Master Channel:11 Frequency:2.462 GHz (Channel 11) Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality=43/100 Signal level=-83 dBm Noise level=-83 dBm IE: WPA Version 1 Group Cipher : TKIP Pairwise Ciphers (1) : TKIP Authentication Suites (1) : PSK Extra: Last beacon: 520ms ago Cell 07 - Address: 00:06:25:98:41:C4 ESSID:"dom" Protocol:IEEE 802.11b Mode:Master Channel:6 Frequency:2.437 GHz (Channel 6) Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s Quality=30/100 Signal level=-91 dBm Noise level=-91 dBm Extra: Last beacon: 3360ms ago Cell 08 - Address: 00:30:AB:20:38:6E ESSID:"Wireless" Protocol:IEEE 802.11b Mode:Master Channel:6 Frequency:2.437 GHz (Channel 6) Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s Quality=28/100 Signal level=-92 dBm Noise level=-92 dBm Extra: Last beacon: 8628ms ago
Oczywiscie zawartosc tego pliku jest dynamiczna.
- 28-02-2008 01:20
No to troszkę pomieszamy :)
Plik skanuj:
#!/bin/bash
[[ -z $1 ]] && exit 1
iwlist "$1" scan \ | grep [CE][eS][lS][lI] \ | tr -d '\n' \ | sed 's/Cell/\nCell/g;s/ //g;' \ > $HOME/cell.txt
odpalasz jako: skanuj eth1 Wynik:
Cell 01 - Address: 00:08:A1:AF:CE:FC ESSID:"mechaniczny rządzi !!!! chwasty" Cell 02 - Address: 00:1B:11:F9:0F:6E ESSID:"ChudyWiFi" Cell 03 - Address: 00:1B:11:9B:99:4C ESSID:"Markowskiego_8" Cell 04 - Address: 00:08:A1:AF:CA:98 ESSID:"MISIAKI" Cell 05 - Address: 00:19:5B:BC:DF:EF ESSID:"KACZOR" Cell 06 - Address: 00:15:E9:0D:30:60 ESSID:"kazek" Cell 07 - Address: 00:06:25:98:41:C4 ESSID:"dom" Cell 08 - Address: 00:30:AB:20:38:6E ESSID:"Wireless"
zostaje zapisany do pliku $HOME/cell.txt
Następnie plik datatab:
#!/bin/bash
nr=0 while read x; do declare tab_s["$(( nr-1 ))"]="$x" nr="$(( ++nr ))" done< $HOME/cell.txt
wczyta Ci ładnie cały plik do tablicy - cała linia jako jedna komórka.
Nie mam pojęcia co działasz i jak to ma ostatecznie wyglądać, dlatego na razie rozbiłem na 2 oddzielne pliki byś miał ładnie poglądowo :) Gdyby całość robić jako jeden skrypt, to można od razu robić potokiem bez zapisywania do pliku.
Pozdrawiam
kuleczek - 28-02-2008 08:56
To moze napisze, co robie :) Wymyslilem sobie, ze chce napisac skrypt, ktory ulatwi zycie posiadaczowi laptopa (mnie) w laczeniu sie z publicznymi hot spotami, ale i nie tylko. Na ta chwile uruchomienie skryptu mialoby wyswietlic liste dostepnych sieci (w dalszej wersji z ew. zabezpieczeniami). Uzytkownik, z listy wybralby siec ( w dalszej wersji, jesli siec bylaby zabezpieczona, wpisalby klucz). Po zatwierdzeniu nastapilaby edycja pliku /etc/network/interfaces oraz restart sieci. To tak w ogolnym zarysie. :) Na poczatek chce zrobic tylko niezabezpiecozne sieci.
Dzieki za powyzsze listingi. Wieczorem je sobie poanalizuje.
[ Dodano: 2008-02-28, 20:12 ] Czy mogę prosić o objaśnienie tej linii: | sed 's/Cell/\nCell/g;s/ //g;' \
Tzn. wiem za co ona odpowiada - rozbija jeden długi wiersz na tyle ile jest Cell, ale nie umiem rozgryźć składni. man sed i google trochę pomogły, ale nie do końca.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|