next up previous
Next: Polecenie find - wyszukiwanie Up: wyklad13 Previous: Działanie skryptu:

Działanie oryginalnego polecenia finger, które jest przetwarzane przez skrypt

[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



Adam Liwo 2002-03-07