[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