Ga naar hoofdinhoud

Labo 12 — Bash scripting

In dit labo schrijf je Bash-scripts van toenemende complexiteit. Je combineert variabelen, condities, loops en functies om praktische taken te automatiseren.

Leerstof

Oefening 1 — Je eerste script

  1. Maak een bestand hallo.sh aan.
  2. Voeg de juiste shebang-regel toe als eerste regel.
  3. Laat het script de tekst "Hallo, [jouw naam]!" afdrukken.
  4. Maak het script uitvoerbaar.
  5. Voer het script uit.

Oefening 2 — Variabelen en commandosubstitutie

  1. Maak een script systeem_info.sh dat de volgende informatie toont:

    Gebruiker : <huidige gebruikersnaam>
    Hostname : <naam van de machine>
    Datum : <huidige datum en tijd>
    Werkmap : <huidig pad>

    Gebruik commandosubstitutie ($(...)) om de waarden op te vragen.

  2. Breid het script uit met een variabele WELKOM die de tekst "Welkom op het systeem" bevat en die boven de tabel wordt afgedrukt.


Oefening 3 — Argumenten

  1. Maak een script begroet.sh dat een naam als argument verwacht en "Hallo, [naam]!" afdrukt.
  2. Wat gebeurt er als je het script uitvoert zonder argument? Voeg een controle toe: als er geen argument is, druk je "Gebruik: ./begroet.sh <naam>" af en stop je het script met exitcode 1.
  3. Breid het script uit zodat het ook een tweede optioneel argument --formeel accepteert. Als dat argument meegegeven is, drukt het script "Goedendag, [naam]." af in plaats van "Hallo, [naam]!".

Oefening 4 — Condities

  1. Maak een script controleer_bestand.sh dat als argument een bestandspad verwacht.

    • Als het bestand bestaat: druk "[pad] bestaat" af.
    • Als het een map is: druk "[pad] is een map" af.
    • Als het niet bestaat: druk "[pad] bestaat niet" af en stop met exitcode 1.
  2. Maak een script leeftijd.sh dat een getal als argument verwacht en het volgende afdrukt:

    • Jonger dan 18: "Minderjarig"
    • 18 tot en met 64: "Volwassene"
    • 65 of ouder: "Senior"

Oefening 5 — Loops

For-loop

  1. Maak een script mappen_aanmaken.sh dat drie mappen aanmaakt: project_1, project_2 en project_3. Gebruik een for-loop over een lijst van nummers.
  2. Breid het script uit zodat het in elke map ook een leeg bestand README aanmaakt.

While-loop

  1. Maak een script aftellen.sh dat van 10 aftelt naar 0 en dan "Lancering!" afdrukt. Gebruik een while-loop.

Bestanden verwerken

  1. Maak een bestand namen.txt met vijf namen (één per regel).
  2. Maak een script begroet_lijst.sh dat het bestand regel per regel leest en elke naam begroet: "Hallo, [naam]!".

Oefening 6 — Functies

  1. Maak een script rekenmachine.sh met twee functies: optellen en aftrekken. Elke functie verwacht twee argumenten en drukt het resultaat af.

    Voorbeeld:

    optellen 5 3 # drukt "8" af
    aftrekken 10 4 # drukt "6" af
  2. Roep beide functies aan vanuit het script met testwaarden.

  3. Breid het script uit met een functie controleer_getal die controleert of een meegegeven waarde een geheel getal is. Gebruik deze functie als validatie vóór de berekening.


Oefening 7 — Een praktisch script

Maak een script backup.sh dat automatisch een back-up maakt van een opgegeven map.

Vereisten:

  • Het script verwacht één argument: het pad van de map die gebackupd moet worden.
  • Als er geen argument meegegeven is of de map niet bestaat, geef je een foutmelding en stop je.
  • De back-up wordt opgeslagen als een gecomprimeerd archief in een map ~/backups/.
  • De bestandsnaam bevat de naam van de originele map én de huidige datum:
    mapnaam_YYYY-MM-DD.tar.gz
  • Na afloop druk je af waar de back-up opgeslagen is.

Voorbeeld:

$ ./backup.sh ~/documenten
Back-up aangemaakt: /home/gebruiker/backups/documenten_2025-03-15.tar.gz

Uitdaging — Logbestand rapporteren

Maak een script log_rapport.sh dat een logbestand als argument verwacht en er een samenvatting van maakt.

Het script drukt het volgende af:

=== Lograpport: server.log ===
Totaal regels : 42
ERROR-meldingen : 8
WARNING-meldingen: 5
INFO-meldingen : 29

Eerste melding : ERROR: database connection failed
Laatste melding : INFO: cache cleared

Gebruik functies, variabelen en pipes. Test met het server.log-bestand uit Labo 9.