ďťż
 
 
   bash - zmienna tablicowa
 
 

Tematy

 
    
 

 

 

 

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis