Nowe posty

Autor Wątek: Skrypt wyświetlający zalogowanych użytkowników  (Przeczytany 3377 razy)

Arkadio

  • Gość
Skrypt wyświetlający zalogowanych użytkowników
« dnia: 2012-03-06, 19:45:10 »
Witam,
Dopiero zaczynam przygodę z linuxem i skryptami do basha, z racji tego potrzebuję pomocy. Potrzebuję skryptu pokazującego zalogowanych użytkowników, ze wskazaniem na tych którzy dojdą i tych którzy się wylogowali. Nie wiem jak wyświetlać wszystkich i jednocześnie wskazywać.

 
Cytuj
#!/usr/local/bin/bash


touch nowy.txt
touch nowszy.txt
touch przyszli.txt
touch poszli.txt

while (1>0)
do

who > nowy.txt

sleep 5

who > nowszy.txt

diff nowy.txt nowszy.txt >raport.diff

grep ^">" raport.diff >poszli.txt

grep ^"<" raport.diff >przyszli.txt
echo -e "\\033[0;31m"
cat przyszli.txt
echo -e "\\033[0;32m"
cat poszli.txt
echo -e "\\033[0;0m"
sleep 5

done
Proszę o pomoc.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Skrypt wyświetlający zalogowanych użytkowników
« Odpowiedź #1 dnia: 2012-03-06, 22:11:20 »
1) Istnieje polecenie true (i false też). Więc wystarczy:
while true; do ... done
.
2) Plik nowy.txt twórz tylko raz przed pętlą, i nadpisuj go plikiem nowszy.txt na końcu każdego przebiegu pętli. A nowszy.txt generuj na początku każdej pętli.
Wystarczy też tylko raz poczekać (sleep) na końcu pętli.

3) Co do problemu:
Diff to właściwe narzędzie. Ale gdybyś przeczytał jego manual, to skrypt skrócił by się znacząco ;)
diff                                        \\
    --unchanged-line-format="           %L" \\
          --old-line-format="  poszedl: %L" \\
          --new-line-format="przyszedl: %L" \\
    nowy.txt                                \\
    nowszy.txt
.
4) Przed diffowaniem warto posortować pliki, żeby nie okazało się, że skrypt błędnie interpretuje zamianę kolejności linii jako przyjście i pójście użytkownika.

Pozdrawiam.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Skrypt wyświetlający zalogowanych użytkowników
« Odpowiedź #2 dnia: 2012-03-06, 22:13:55 »
5) W moim systemie nie ma czegoś takiego jak /usr/local/bin/bash. Jest /bin/bash. Dlatego najlepiej napisać:
#!/usr/bin/env bash