Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /bin/csh
- #
- # Meno: Beno David, kr. 2
- # Kruzok: 02
- # Datum: pripravne_csh (id: 6)
- # Zadanie: zadanie23
- #
- # Text zadania:
- #
- # Zistite, ktori pouzivatelia sa hlasia na osu v noci (teda cas prihlasenia je
- # od 22:00 do 05:00). Do uvahy berte len ukoncene spojenia za poslednu dobu
- # (odkedy system zaznamenava tieto informacie).
- # Ak bude skript spusteny s parametrom -n <pocet>, zistite, ktori pouzivatelia
- # sa na osu prihlasili v noci viac ako <pocet> krat.
- # Dodrzte format vystupu uvedeny v priklade.
- # Pomocka: pouzite prikaz last
- #
- # Syntax:
- # zadanie1.csh [-h] [-n <pocet>]
- #
- # Format vypisu bude nasledovny:
- # Output: '<meno pouzivatela> <pocet nocnych prihlaseni> <datum a cas posledneho
- nocneho prihlasenia>'
- #
- # Priklad vystupu:
- # Output: 'sedlacek 5 03-23 23:12'
- # Output: 'tubel 2 03-23 22:55'
- # Output: 'kubikm 4 03-23 02:31'
- #
- #
- # Program musi osetrovat pocet a spravnost argumentov. Program musi mat help,
- # ktory sa vypise pri zadani argumentu -h a ma tvar:
- # Meno programu (C) meno autora
- #
- # Usage: <meno_programu> <arg1> <arg2> ...
- # <arg1>: xxxxxx
- # <arg2>: yyyyy
- #
- # Parametre uvedene v <> treba nahradit skutocnymi hodnotami.
- # Ked ma skript prehladavat adresare, tak vzdy treba prehladat vsetky zadane
- # adresare a vsetky ich podadresare do hlbky.
- # Pri hladani maxim alebo minim treba vzdy najst maximum (minimum) vo vsetkych
- # zadanych adresaroch (suboroch) spolu. Ked viacero suborov (adresarov, ...)
- # splna maximum (minimum), treba vypisat vsetky.
- #
- # Korektny vystup programu musi ist na standardny vystup (stdout).
- # Chybovy vystup programu by mal ist na chybovy vystup (stderr).
- # Chybovy vystup musi mat tvar (vratane apostrofov):
- # Error: 'adresar, subor, ... pri ktorom nastala chyba': popis chyby ...
- # Ak program pouziva nejake pomocne vypisy, musia mat tvar:
- # Debug: vypis ...
- #
- # Poznamky: (sem vlozte pripadne poznamky k vypracovanemu zadaniu)
- #
- # Riesenie:
- @ n = 0
- while($#argv>0)
- if(("$argv[1]" != "-h") && ("$argv[1]" != "-n")) then
- echo "Error: 'zly prepinac'" > /dev/stderr
- exit 1
- endif
- if($argv[1] == '-h') then
- echo "Zadanie (C) Beno David"
- echo ""
- echo "Usage: test <-h> <-n> <pocet>"
- echo " <-h>: help"
- echo " <-n>: pocet prihlaseni"
- exit 0
- endif
- if($argv[1] == '-n') then
- shift argv
- if($#argv == 0) then
- echo "Error: 'Za n musi byt cislo'" > /dev/stderr
- exit 1
- endif
- expr "$argv[1]" + 1 >& /dev/null
- if($status != 0) then
- echo "Error: 'Za n musi byt cislo'" > /dev/stderr
- exit 1
- endif
- set n=$argv[1]
- endif
- shift argv
- end
- if($n < 0) then
- echo "Error: '-n': zaporna hodnota" > /dev/stderr
- exit 1
- endif
- foreach meno(`last | cut -d " " -f1 | sort | uniq | grep -v "shutdown" | grep -v ^$ | grep -v "wtmp"`)
- set pocet=`last | tr -s " " | grep -v "still logged in" | grep "^$meno " | rev | cut -d " " -f4,5,6 | rev | grep '2[23]:..\|0[01234]:..' | wc -l`
- if($pocet > $n) then
- set posl = `last | tr -s " " | grep -v "still logged in" | grep "^$meno " | rev | cut -d " " -f4,5,6 | rev | grep '2[23]:..\|0[01234]:..' | head -1`
- set mesiac = $posl[1]
- if($mesiac == "Jan") then
- set mesiac = "01"
- else if($mesiac == "Feb") then
- set mesiac = "02"
- else if($mesiac == "Mar") then
- set mesiac = "03"
- else if($mesiac == "Apr") then
- set mesiac = "04"
- else if($mesiac == "May") then
- set mesiac = "05"
- else if($mesiac == "Jun") then
- set mesiac = "06"
- else if($mesiac == "Jul") then
- set mesiac = "07"
- else if($mesiac == "Aug") then
- set mesiac = "08"
- else if($mesiac == "Sep") then
- set mesiac = "09"
- else if($mesiac == "Oct") then
- set mesiac = "10"
- else if($mesiac == "Nov") then
- set mesiac = "11"
- else if($mesiac == "Dec") then
- set mesiac = "12"
- endif
- set den = $posl[2]
- if($den == "1") then
- set den = "01"
- else if($den == "2") then
- set den = "02"
- else if($den == "3") then
- set den = "03"
- else if($den == "4") then
- set den = "04"
- else if($den == "5") then
- set den = "05"
- else if($den == "6") then
- set den = "06"
- else if($den == "7") then
- set den = "07"
- else if($den == "8") then
- set den = "08"
- else if($den == "9") then
- set den = "09"
- endif
- set cas=$posl[3]
- echo "Output: '$meno $pocet $mesiac-$den $cas'"
- endif
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement