home       inleiding       sysadmin       services       links       bash       werk       nothing      

oefeningen uit de cursus http://old.linux800.be/lx-scr-info-inleiding.php

opgelegd_werk_scripting_avo_1819

(1) verplichte lectuur: http://old.linux800.be/lx-scr-info-inleiding.php

(2) http://old.linux800.be/lx-scr-info-basisregels.php
iedereen 2 oefeningen (van 5) uit basisregels :: 1 keer met echo en 1 keer met printf

  1. Voorzie de oefening 'tedoen' uit het hoofdstuk introductie van een shebang en kommentaar.
     
  2. Schrijf een script met als naam jaarkal dat een jaar opvraagt, en daarna de kalender van dat jaartal op scherm brengt. Vergeet de kommentaar niet en de shebang.
     
  3. Schrijf een script met als naam maandkal dat eerst het jaartal, en daarna de maand opvraagt, en dan van die maand de kalender opscherm brengt.
     
  4. Schrijf een script met de naam statistiek. Breng eerst op scherm "Vandaag is de datum", gevolgd door de huidige tijd en datum op een nieuwe lijn, dan op de volgende regel "Het aantal aangelogde gebruikers is", met op de volgende regel het aantal ingelogde gebruikers, en tot slot "uw huidige directory is:" gevolgd door de huidige directory.
     
  5. Schrijf een script dat een gebruikersnaam opvraagt, en de totale grootte (bezetting) van alle files en subdirectories van de homedirectory van die gebruiker op scherm brengt.


(3) http://old.linux800.be/lx-scr-info-parameters.php
iedereen 1 oefening (van 2)

  1. Schrijf een script met als naam uitv dat als argument een filenaam krijgt. Die filenaam wordt door het script dan executable gemaakt.
     
  2. Soms doen we een rm met wildcards in het argument zoals $ rm *am*, en dan zit er wel eens toevallig teveel in onze selectie. Jammer maar helaas! Schrijf daarom een script met de naam showrm dat eerst de te deleten bestanden op scherm pagineert, daarna wacht op "enter drukken om verder te gaan", ctrl-c om te stoppen", en tenslotte een rm -v doet van het argument.

(4) http://old.linux800.be/lx-scr-info-variabelen.php
iedereen 1 oefening (van 2)

  1. Schrijf een script met de naam "envelop" dat vraagt om een aanspreektitel, een voornaam en een naam, een adreslijn1 (straat en nummer), een adreslijn2 (soms heb je twee adresregels nodig), een postcode en een plaatsnaam. Maak ook een read only variabele aan met als naam "land" en als waarde "belgië". Druk daarna de gegevens af op scherm, zoals ze normaal op een envelop zouden worden geschikt.
     
  2. Schrijf een script met als naam varipar, dat twee parameters aanvaardt, en deze als één string toewijst aan een variabele. (Dat is heel simpel, strings worden gewoon achter mekaar geschreven bij een toewijzing - denk aan de uitbreiding van PATH)

(5) verplichte lectuur: http://old.linux800.be/lx-scr-info-quotes-backslash-accolade.php

(6) http://old.linux800.be/lx-scr-info-if.php
iedereen 1 oefening van 2

  1. Keer nog even terug naar het script space uit de oefeningen van het hoofstuk intro.
    Herschrijf dit script zodanig dat het 3 opties kan accepteren (maar slechts één tegelijk) -m voor memory -s voor swap en -d voor diskspace. Indien geen optie wordt meegegeven worden memory, swap en diskspace afgedrukt (net zoals in de oefening uit intro)
     
  2. Schrijf een script met als naam welkom. Dit script krijgt van de gebruiker 3 parameters: een naam, een geslacht en een taal. Bedoeling is dat het script de output in de juiste taal plaatst (nl, fr of en) in de volgende vorm: Bonjour, Mme. Leroy of Goeiedag Meneer Cattoor enz.

(7) http://old.linux800.be/lx-scr-info-case.php
iedereen dezelfde oefening

  1. schrijf een script met de naam nu, en vijf opties die niet gecumuleerd worden:
    -h : brengt de tijd op scherm
    -d : brengt de datum op scherm in europese notatie
    -w : brengt de weekdag op scherm (maandag ...)
    -c : brengt een maandcalender op scherm van de huidige maand
    -j : brengt een jaarcalender op scherm van het huidige jaar
    geen of verkeerde optie: brengt gewoon date op scherm

(8) http://old.linux800.be/lx-scr-info-substitution.php
iedereen 1 oefening van 3

  1. Schrijf een script dat zoekt welke dag van week we zijn (maandag tot zondag) en dit afdrukt in het nederlands.
     
  2. Wat doet volgend commando, ergens in een script:
    echo "<$0"
    Test dit met de vorige oefening.
     
  3. Schrijf een script dat test wie het script uitvoert; indien root het script uitvoert moet er een melding op scherm komen "het gebruik van dit script als root is te gevaarlijk", en moet het script stoppen. Indien een niet root gebruiker dit script uitvoert wordt alias rm="rm -f" toegevoegd aan zijn .bashrc

(9) http://old.linux800.be/lx-scr-info-for-loop.php
iedereen 1 oefening van 3

  1. Wijzig in het hogere voorbeeld, zipar, de for instructie als volgt:
    for x in *
    werkt alles nog zoals in het voorbeeld?
    Werkt zipar ook met $(ls -l) ?
    In het voorbeeld "zipar" voeg je de volgende elementen toe:
    geef het pad waarin moet worden garchiveerd als parameter mee, indien geen pad wordt meegegeven wordt de huidige directory ge'zipar'd
    test of er een archiefdirectory bestaat met als naam ziparchief in de directory waarin zipar wordt uitgevoerd, en plaats hierin de gezipte bestanden. Als de directory niet bestaat moet ze gemaakt worden.
    voeg seconden toe in de timestamp
    vervang de underscore in de nieuwe filenaam door een .
    Vraagje: waarom heeft het geen zin om de gezipte bestanden achteraf nog eens te tarren?
     
  2. Hoe lees je met een eenvoudige for loop /etc/passwd om hem dan regel per regel terug op scherm te brengen met een echo? Gebeuren er rare dingen? Waarom? Zijn hier oplossingen voor?
     
  3. Maak een bestand met als naam "leden" (met op elke regel een naam, geslacht en taalcode) van de vorm:
    ludo m n
    claire v n
    luc m f
    gregory m e
    marleen v f
    corsendonk donker
    Schrijf een script welkom4 dat dit bestand inleest met een for loop, en druk telkens, regel per regel, een correcte aanspreektitel af (in de juiste taal), gevolgd door de naam. (vb: Dag Meneer ludo Dag Mevrouw claire Bonjour Monsieur Luc ...)
    Tip: Gebruik een extra tel-variabele om te kijken waar de volgende regel begint.

(10) http://old.linux800.be/lx-scr-info-while.php
iedereen 1 oefeningen van 2

  1. schrijf een interactief script 'superkill' dat de ingegeven parameter ($1) gebruikt om alle draaiende processen case insensitive te greppen op deze parameter. Per match wordt de processnaam en de pid op scherm gebracht met de vraag of dit proces gekilld mag worden. Indien ja wordt er effectief gekilld.
     
  2. Maak een bestand met als naam "leden" (met op elke regel een naam, geslacht en taalcode) van de vorm:
    ludo m n
    claire v n
    luc m f
    gregory m e
    marleen v f
    corsendonk donker
    Schrijf een script URwelkom dat dit bestand leest, nu met een while loop, en druk telkens een correcte aanspreektitel af (in de juiste taal), gevolgd door de naam. (vb: Bonjour Monsieur Luc)

(11) verplichte lectuur: http://old.linux800.be/lx-scr-info-awk-cut-sed.php

(12) http://old.linux800.be/lx-scr-info-file-io.php
iedereen 2 oefeningen van 4

  1. Schrijf een script met als naam "addprofile" dat je .profile opent en er de volgende regels aan toe voegt:
    export PATH=$PATH:~/bin
    alias cls="clear"
    alias ll="ls -al"
    De quotes moeten er ook in op één of andere manier ...
     
  2. Schrijf een script met als naam "creagebr" dat een reeks gebruikersnamen verwacht als argumenten en deze gebruikers dan aanmaakt. Geef ze het paswoord "sdf12345". Test de exit status van het commando useradd. Schrijf per aangemaakte gebruiker in een logbestand /var/log/creagebr dat die gebruiker toegevoegd is, en per fout dat er een fout is opgetreden. Stuur dezelfde output op scherm.
     
  3. Schrijf een script met als naam "achterstevoren" dat een bestand regel per regel inleest in een array en vervolgens achterstevoren afdrukt.
     
  4. Schrijf een script met als naam "tmpback" dat een pad naar een folder vraagt en dan een tar-backup van die folder in /tmp zet. De backup is een tar.gz file van de ingegeven folder. De tar.gz filenaam is hetzelfde als de pathnaam, waarbij slashes zijn vervangen door underscores. Redirect de output van tar naar een logbestand met als naam tmpback.log

(13) http://old.linux800.be/lx-scr-info-oefeningen.php
iedereen 1 oefening uit 7

  1. Schrijf een script dat alle orphan files (van niet meer bestaande uid's) backupt, en die files verwijdert. Kan dit ook met één enkel commando?
     
  2. Schrijf een script dat de niet ingelogde users (boven 500 in centos/ 1000 in debian) blokkeert.
     
  3. Schrijf een script dat om een usernaam vraagt, en dan van die user nagaat of hij bestaat, welke zijn homedirectory is en hoeveel ruimte de user gebruikt.
     
  4. Schrijf een script dat jpg-files uit een vooraf gegeven "bron directory" (bijvoorbeeld een usb-stick of SD-card) kopieert naar een directory /pictures.
    In /pictures worden de foto's gesorteerd met 1 subdirectory per jaartal 2010, en in elk jaar nog eens met een directory per maand (2010)01_jan. Dat in deze subdirectory het jaartal toch nog voorkomt, laat later voor de gebruiker toe te sorteren en te archiveren zonder jaardirectory. Het script moet controleren of deze directories al bestaan, en indien niet, ze creëren.
     
  5. Schrijf een script dat om een usernaam blijft vragen, tot je niets meer intikt. Het script moet telkens de user aanmaken met paswoord 'sdf12345'. Test het script eerst als gewone gebruiker, en later op een testmachine als root.
    Voeg de optie --smb die gelijk is aan -s om zodra het hogere werkt, indien de optie is ingetikt ook de user(s) te voorzien van een smb-account met hetzelde paswoord.
     
  6. Schrijf een script dat om een domeinnaam (FQDN) vraagt, en vervolgens in apache2, volautomatisch een virtuele webserver aanmaakt, en een gebruiker met dezelfde naam met een paswoord 'sdf12345'. In de home van deze gebruiker komt een subdirectory httpdocs, waarin de website terecht zal komen. Maak voor de user ook reeds een index.html aan met daarin de domeinnaam tussen de tags <h1>. Zorg ervoor dat de permissions en de ownerships onmiddellijk goed staan!
    Kun je bovendien je script apache2 laten herstarten en controlleren of alles werkt, ook de ftp toegang?
     
  7. Schrijf een script dat accenten en tildes verwijdert uit filenamen, en tevens spaties, asterisks, ampersands en vraagtekens vervangt door underscores. Als parameter geef je de directory mee waarin dit moet gebeuren. Indien je geen directory meegeeft moet het script vragen of het in huidige directory moet werken. Indien nee moet het script stoppen. Als je de optie -S meegeeft, vervangt het script alleen spaties en laat het andere karakters met rust.