Bash skripta za lepši izpis prijav

Imam problem pri programiranju Bash skripte, ki popravi izpis ukaza last. Skripta naj bi izpisala ime uporabnika, koliko krat je bil prijavljen in koliko časa je bil prijavljen. Z ukazom za zagon skripte naj bi se vnesli dva argumenta. Prvi argument nam pove od katerega datuma gledamo prijave, drugi argument pa do katerega datuma gledamo prijave.

Primer (izgled vpisa):
$ prijava 27/04 06/05

izpis:
janez 2x 0 dni 2:46
luka 4x 0 dni 11:42
mare 2x 0 dni 1:58
lolek 3x 1 dan 18:41

v naprej se zahvaljujem za pomoč.
«1

Komentarji

  • Tukaj ne rešujemo nalog pri Operacijskih sistemih :)

    Lahk ti damo kak hint...kaj več kot to pa ne boš dobil :)
  • A lahko sporočite kak hint, ker meni se res ne sanja kaj kako in na kakšen način naj le-to naredim...
    imam pa nek "ukaz" ki bi kaj pomagal, kako naj ga uporabim?
    last -R |grep -v "reboot"|grep -v "gone" |grep -v "logout" | grep "tty" | tr -s " " | cut -d" " -f1,4,5,9
    HVALA!
  • znotraj tega ukaza se nahaja skoraj vse kar rabiš..od uporabniških imen k dostopajo (moraš preštet koliko krat je kater uporabnik dostopal do sistema - hint grep $i | wc -l) ter ga izpisat -hint ($i)..do datuma - hint ( last -t YYYYMMDDHHMMSS) ter seveda ur ter minut - hint ( cut -d" " -f4)
  • Hvala za nekaj nasvetov. Zanima ne pa kako bi prenesel dva argumenta, ki jih vpišemo pred zagonom skripte v neko spremenljivko ali funkcijo?
  • prvi argument je $1 drugi pa $2
    da dobiš taprave vrednosti iz teh argumentov pa hint - `expr substr ...` ali pa cut -d/ -f... :)
  • Jaz sem naredil tako, da sem najprej definiral da je spremenljivka konec=$2. Nato pa bi rad odstranil / . Zakaj ta ukaz ne deluje, ali ni smisel tr da odstranimo oz. zamenjamo znake? Sem bral man od tr in piše da -d pomeni delete. Če potem hočem izpisati, se mi ne izpiše nič.
    konec=2011"$konec"000000 | tr -d "/"

    Pa še to, zakaj ko dobim iz datoteke imena (samo imena) in potem pošljem skozi pipe in naapišem uniq, se mi ista imena večkrat prikažejo?

    lp
  • slobo probaj poslat skozi pipe prvo v sort in nato še pošlješ uniq ..takrat ti izpiše sam enkrat imena :)
    Zakaj je potrebn sort - pojma nimam - enostavno dela - sumim pa zato da imaš vsa imena skupaj in nato loči z uniq če je več enakih imen zapored :)

    Slobo sej dela

    echo "26/05" | tr -d "/"
    2605
    sam pač ti delaš čuda s tim koncem :)

    probaj
    konec=2011`echo $1 | tr -d "/"`000000
  • Ja, zdaj pa je problem ker v last -t hoče imeti (leto-mesec-dan...), jaz pa imam dan-mesec. Sem gledal za zamenjavo niza, vendar kako vedeti, kaj moraš zamenjati? Ali lahko samo v dveh stavkih razložite kako bi se vi lotili naloge. Ne mislim ukazov, samo postopek.
  • CrazyLemon je dejal/-a:
    da dobiš taprave vrednosti iz teh argumentov pa hint - `expr substr ...` ali pa cut -d/ -f...
    Poglej si ta dva ukaza..oba lahk naredita to kar ti želiš... testiraš pa lahk tako da vpišeš recimo v terminalu
    expr substr "27/04" 1 2
    1 pa 2 pomeni prvi in drugi char..
    al pa
    echo "27/04" | cut -d/ -f1
    prvo polje (-f1) katero loči delimiter (-d) '/'

    Podal sem konkretne ukaze...ampak samo za bolše razumevanje..sam boš mogu jih prilagodit tako da ustrezajo tvoji nalogi :)

    P.s. upam da ne govoriš meni "vi" ker ne bom več pomagal :lol:
  • Zakaj pa to ne deluje ko hočem izpisati?
    mesec= echo $1 | cut -d/ -f2

    Če napišem echo "Mesec je $mesec" mi ne izpiše nič
  • Kako ustvariti neko datoteko, ki bi bi bila zaklenjena oz. imela ne lock. V njo bi shrani nek rezultat oz. besebilo ga uporabil in datoteko izbrisal. Zanima me samo kako bi ustvaril ključavnico na datoteki?
  • Slobo karkoli se izvaja mora bit med ` `

    mks1992 poguglaj (uporabi man/help) mal filelock - a ni vam to peer omenjan pri vajah zadnjič? :)
  • Ja, to je bil problem, pa še en presledek preveč je nekje bil. Zdaj sem napisal v "konec", do kje naj se izpiše datoteka last (drugi argument). Naredil sem tudi da mi prešteje št. vseh uporabnikov v tistem obbdobju in to zapiše v spremenljivko. Znam tudi izpisati samo imena uporabnikov in njihove čase, vendar kako naprej? Kako pa se naredi da ti izpiše med dvema časovnima intervaloma? Ker pri last -t ČAS pomeni, da ti izpiše vse do takrat.
  • Jah en način je da prvo greš z for zanko do last -t časDO
    in nato še eno for zanko do last -t časOD ter odšteješ ta časOD... ni ravno najbolša rešitev ampak dela - preverjeno :)

    kot vidim se fantje na fri-info igrajo z date-om..ta bi se tudi lahk uporabu
  • A obstaja mogoče kakšna funkcija oz. ukaz ki avtomatko upošteva začetni in končni čas in avtomatsko ta čas izloči katerega želomo? last -t YYYYMMDDHHMMSS je do datuma, kako pa bi napisal od nekega datuma naprej? hvala
  • mks1992 Član
    uredil/-a 19. May, 2011
    Ko ti izvedeš ukaz last dobiš mesec v nekem nizu. Zanima me ali so to kratice za določene mesece ali celotno ime meseca. V primeru, da so uporabljene kratice so to prve tri črke meseca ali kaj drugega? Ali se to da spremeniti v kakšno številko?
    Zanima me še kako lahko z grep ukazom izbiramo med dvema parametroma. Naprimer: grep "1" "2" => Če je nekje 1 vzami 1, če pa je nekje 2 pa vzami 2, če pa ni nič od tega pa ne vzami ničesar. Se bi dalo to nardit?
    V naprej se zahvaljujem za pomoč.
  • mpucel2 ne da bi js vedu ..vzameš "večji" datum ter sešteješ vse kar moraš seštet nato izpišeš "manjši" datum ter odšteješ odvečne datume :) - to kar sm napisal v postu nad tvojim

    mks1922 ..to so prve tri črke meseca in predvidevam da se da... z date-om ..kot sem to že napisal zgoraj
    za izbiranje med ukazom pa uporabi if? :)
  • CrazyLemon ... Pogruntal sem rešitev, ki se glasi: egrep "vrednost1|vrednost2|vrednost3|..."
    Samo še vedno me zanima, kako bi spremenil ime oz. kratico za ime meseca v številčno vrednost, ki predstavlja ta mesec.
  • mks1992 'case' si mal poglej..tako z vaj kot na googleu :)
  • Kako bi izpisal istoležne vrstice iz dveh datotek skupaj v eno vrstico?
    se pravi prva vrstica ene datoteke in prva vrstica druge datoteke in tako naprej...:/
Za komentiranje se prijavite ali pa se vpišite.