Pitäisi ohjelmoida UNIX- käyttöjärjestelmään Shell- kielellä komentotulkki joka tutkisi onkojärjestelmään kirjautuneena viisi käyttäjää joiden tunnukset tiedetään. Mikäli käyttäjä löytyy hänestä pitäisi pystyä näyttämään tarkempia tietoja. Miten tällaisen ohjelman pystyy tekemään? Miten saa aikaan sellaisen ehtolauseen että mikäli käyttäjä löytyy, suoritetaan komento joka näyttää hänestä tarkempia tietoja ja jatkaa sitten seuraavaan käyttäjään ja niin edelleen? Rautalangasta väännetyt ohjeet tai sitten linkki sellaiselle sivulle jossa viimmisen päälle ohjeet aiheesta. Olen aivan aloittelija ohjelmoinnissa.
UNIX Shell- ohjelmointi
2
839
Vastaukset
- Mik
Siis olet tekemässä komentotulkkiskriptiä etkä kokonaan uutta komentotulkkia ? Oletaan nyt niin, että tarkoitit tuota, niillä kun on olennainen ero. Mille komentotulkille ohjelma pitäisi olla ?
Homman voinee tehdä helposti komennoilla w, grep, sekä komentotulkkikohtaisilla ehto- ja toistolauseilla (useimmissa if ja while). Lisäksi tulosteiden putkituksella (|:lla) saadaan selkeä toteutus.
Koska et kertonut mille komentotulkille ohjelma (hmm...koulutehtävä kuitenkin) pitäisi tehdä, niin voin hahmotella jonkun pohjan mistä lähteä liikkelle.
bashille while-looppia käyttävä versio (GNU-työkaluilla):
cat nimitiedosto | while read nimi;do
w | grep "^$nimi "
done
Tuossa selvitään näköjään ilmankin iffiä, koska w:n tulosteesta tulostuu vain ne rivit, jossa on alussa käyttäjätunnus (sekä sen jälkeen tyhjä, jotta esim. tunnus abc ei tulostaisi abcd:n tietoja, jos myös abcd on logannut sisään). Tiedostossa nimitiedosto on listattu käyttäjätunnukset.
Toinen hyvin lyhyt tapa on laittaa grepille optio -f ja laittaa ns. säännölliset lausekkeet tiedostoon, eli joka riville
^tunnus1
^tunnus2
...jne.
Muista se tyhjä välilyönti tunnuksen loppuun, ^ tarkoittaa rivin alkua (ks. man grep). Nyt
"w | grep -f tiedosto" toiminee vastaavasti.
Tapoja tehdä yksi juttu on paljon erilaisia.
Alkuun tulee tehtyä paljon turhaa, ajan kanssa skriptit lyhenee kummasti. Itsekin aloittelijana ollessani tein jonkun sivun mittaisen skriptin, jonka myöhemmin lyhensin alle viiteen riviin toiminnallisuuden sen kummemmin heikentymättä.
Jos käytät bashia, niin katso http://www.tldp.org/LDP/abs/html/ - banaanivaaka
Riippuu mitä tietoja haluat? Onko tiedot erillisessä tiedostossa vai kelpaako ihan finger-tieto?
Esim:
for nimi in `who | cut -d " " -f1 | sort | uniq` ; do finger $nimi ; done
Jos taas on erillisessä tiedostossa niin..
grep $nimi tiedosto.txt
fingerin sijaan.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Ensitreffit Jenni laukoo viinilasin ääressä suorat sanat Jyrkin aikeista: "Mä sanoin, että älä"
Voi ei… Mitä luulet: kestääkö Jennin ja Jyrkin avioliitto vai päättyykö eroon? Lue lisää: https://www.suomi24.fi/viihde272870Ymmärrän paremmin kuin koskaan
Roikut kädessäni ja vedät puoleesi. Näen kuitenkin tämän kaiken lävitse ja kaikkien takia minun on tehtävä tämä. Päästän332525- 1482274
Hullu liikenteessä?
Mikä hullu pyörii kylillä jos jahti päällä? Näitä tosin kyllä riittää tällä kylällä.542239Niina Lahtinen uudessa elämäntilanteessa - Kotiolot ovat muuttuneet merkittävästi: "Nyt on...!"
Niina, tanssejasi on riemukasta seurata, iso kiitos! Lue Niinan haastattelu: https://www.suomi24.fi/viihde/niina-lahti241860Kun Venäjä on tasannut tilit Ukrainan kanssa, onko Suomi seuraava?
Mitä mieltä olette, onko Suomi seuraava, jonka kanssa Venäjä tasaa tilit? Ja voisiko sitä mitenkään estää? Esimerkiks3901696Ano Turtiainen saa syytteet kansankiihoituksesta
Syytteitä on kolme ja niissä on kyse kirjoituksista, jotka hän on kansanedustaja-aikanaan julkaissut Twitter-tilillään1041642- 3091548
- 1351459
Varokaa! Lunta voi sataa kohta!
Vakava säävaroitus Lumisadevaroitus Satakunta, Uusimaa, Etelä-Karjala, Keski-Suomi, Etelä-Savo, Etelä-Pohjanmaa, Pohjanm131446