[adam@etoh ~]$ finger @eto12 [eto12.chem.univ.gda.pl] Login Name Tty Idle Login Time Office Office Phone adam Adam Liwo pts/3 1 Jan 22 16:22 (eto01.chem.univ.gda.pl) grzech Grzegorz Piotrowski pts/1 3d Jan 18 02:56 (etoh.chem.univ.gda.pl) [adam@etoh ~]$ finger @eto02 [eto02.chem.univ.gda.pl] No one logged on.
#!/bin/csh -f ######################################################################### # Skrypt-szpieg tworzacy liste uzytkownikow zalogowanych na komputerach # etoxx w postaci: # komputer: login imie i nazwisko # Lista jest odswiezana do 5 minut. ######################################################################### # Ponizsza petla sterowana przez while (1) jest petla nieskonczona. # Program przerwiemy tylko przez Ctrl-C. while (1) # Czyscimy ekran clear # # Drukujemy naglowek echo "Host Login Name " echo "----------------------------------------" # # Inicjalizujem zmienna eto, ktora bedzie numerem komputera set eto = 0 # # Petla po wszytkich komputerach eto - w petli finger na kazdym z nich while ($eto < 12) set eto = `expr $eto + 1` # # Nastepne polecenie "doczepia" poczatkowe zero do numerow mniejszych niz 10 if ($eto < 10) set eto = 0$eto # # Sprawdzamy, czy ktokolwiek jest zalogowany na danej maszynie; korzystamy # z tego, ze jezeli nie pojawia sie komunikat "No one logged on". Na tworzonej # liscie bedziemy uwzgledniac tylko komputery, na ktorych ktokolwiek jest zalogowany. # set a = `finger @eto$eto | grep logged | awk '{print($3)}'` if ("$a" != "logged") then # # A teraz wreszcie drukowanie danej linijki listy - korzystamy z formatowanego wydruku # przy pomocy awk. Opcja "-v" pozwala wprowadzic do awk zmienna "z zewnatrz"; jest # to konieczne, bo "$" jest w awk uzywany do oznaczania pola a nie zmiennej powloki. # Koncowe filtrowanie przez "uniq" zapobiega powtorzeniu danych uzytkownika, jezeli jest # on zalogowany na danym komputerze wiecej niz raz. finger @eto$eto | grep -v ^Login | grep -v "^\[" | \ awk -v "komp=eto$eto" '{printf("%-10s%-10s%-10s%-10s\n",komp,$1,$2,$3)}' | uniq echo " " endif end # # Czekamy 5 minut nic nie robiac. sleep 300 end