Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2013-04-20 11:37:08

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

bash wpisywanie do tablicy

Witam!
Pisze sobie kilka skryptów w bashu odnośnie zasilania (na razie dla siebie, ale planuje wrzucić na DUGa i do AUR). Mam takie polecenie:

Kod:

who | grep "(:.*)" | awk '{ print $5 " " $1 }'

jak wrzucić każdą linijkę która wyskoczy do kolejnego elementu? bo na przykład coś takiego;

Kod:

zalogowani=$(who | grep "(:.*)" | awk '{ print $5 " " $1 }')

wrzuca wszystko do zalogowani[0] ;// . Domyślam się, że trzeba użyć pętli for - jeżeli tak proszę chociaż o jakiegoś linka /przykład jak to się robi.
Pozdrawiam


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#2  2013-04-20 13:06:38

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: bash wpisywanie do tablicy

Do hashy (tablic asocjacyjnych) lepiej bierz od razu perla.
Działa szybciej od basha (obsługa tablicy) i w przeciwieńswie do basha, w perlu to chleb powszedni, podczas, gdy skryptów basha używajacych tablic ze świeczką można szukać.

Sznurek:
http://pl.wikibooks.org/wiki/Perl/Zmienne#Tablice_asocjacyjne

Dodatkowo, w  razie, gdyby ten skrypt urósł do niepokojących rozmiarów - ~>1000 linii, też łatwiej ogarniesz perla niż basha, zwłaszcza, jak przyda się baza SQL, albo plik XML, czy choćby referencje, lub któryś z XXXX gotowych modułów.

Pozdrawiam
;-)

Ostatnio edytowany przez Jacekalex (2013-04-20 13:07:29)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2013-04-20 16:05:51

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

Re: bash wpisywanie do tablicy

No ciekawy ten perl, ale to w sumie mały prosty skrypt a obecnie mało czasu na poznawanie czegoś nowego. Póki co skleciłem i u mnie (Arch Linux) działa bez zarzutów;
http://pastebin.com/raw.php?i=2iTYbTqz
przydatne jeżeli mamy jakieś skrypty w tle na roocie czy np. z crona w bashu - można łatwo o czymś powiadomić zalogowanych użytkowników w Xach za pomocą libnotify. Sprawdzałem na Wheezy  (na maszynie wirtualnej) i też działa tylko tam polecenie who pokazuje duplikaty (np. kilka razy ten sam użytkownik i ten sam $DISPLAY) - czego Arch nie robi, więc trzeba byłoby dodać jakieś uniq/sort -u -k1,1 itd.. żeby nie wyskakiwało notify np. po dwa razy.

Ostatnio edytowany przez dominbik (2013-04-20 16:07:05)


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#4  2013-04-20 16:07:07

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: bash wpisywanie do tablicy

Tak, musisz użyć pętli. Najlepiej do tego nadaje się while w potoku, ale musisz wziąć pod uwagę, że wtedy kod wewnątrz pętli jest wykonywany w podpowłoce (więc tablica nie będzie powiększana o kolejne elementy). Istnieje kilka obejść.

Poza tym zamiast wywoływać grepa, możesz sprawdzać występowanie w awk-u.

Gotowy kod:

Kod:

ARRAY=()
while read line; do 
   ARRAY+=("$line")
done < <(who | awk '/\(.*\)/ {print $5 " " $1 }')

Przekierowanie wyjścia polecenia jest bashyzmem (zresztą dość nieczytelnym), ale są nim też tablice, więc nie musisz się tym specjalnie przejmować.

Nawiasem mówiąc, tablice w bashu są tak cholernie wolne, że przy większej liczbie elementów już lepiej użyć plików tymczasowych. Albo, jak radzi Jacekalex, normalnego języka programowania (perl lub python).

Offline

 

#5  2013-04-20 16:22:31

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

Re: bash wpisywanie do tablicy

Minio dzięki, chociaż mam wrażenie, że mojego postu nie widziałeś ;) na szczęście udało mi się jakoś bez tych tablic - w sumie nie wiem po co je chciałem (nie znam dobrze basha). w przyszłości spróbuję się nauczyć tego perla, ale to w przyszłości. do pythona mam uraz a bash no tak jak mówicie - nie jest to stricte język programowania.

Ostatnio edytowany przez dominbik (2013-04-20 16:22:58)


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#6  2013-04-20 16:32:32

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: bash wpisywanie do tablicy

Swój opublikowałem dwie minuty po tym, jak pojawił się Twój, więc nie — nie widziałem. Akurat ten silnik forum nie informuje, że w momencie komponowania wiadomości pojawił się nowy post w wątku.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)