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.
Oefening 1 — Je eerste script
- Maak een bestand
hallo.shaan. - Voeg de juiste shebang-regel toe als eerste regel.
- Laat het script de tekst
"Hallo, [jouw naam]!"afdrukken. - Maak het script uitvoerbaar.
- Voer het script uit.
Oefening 2 — Variabelen en commandosubstitutie
-
Maak een script
systeem_info.shdat 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. -
Breid het script uit met een variabele
WELKOMdie de tekst"Welkom op het systeem"bevat en die boven de tabel wordt afgedrukt.
Oefening 3 — Argumenten
- Maak een script
begroet.shdat een naam als argument verwacht en"Hallo, [naam]!"afdrukt. - 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. - Breid het script uit zodat het ook een tweede optioneel argument
--formeelaccepteert. Als dat argument meegegeven is, drukt het script"Goedendag, [naam]."af in plaats van"Hallo, [naam]!".
Oefening 4 — Condities
-
Maak een script
controleer_bestand.shdat 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.
- Als het bestand bestaat: druk
-
Maak een script
leeftijd.shdat een getal als argument verwacht en het volgende afdrukt:- Jonger dan 18:
"Minderjarig" - 18 tot en met 64:
"Volwassene" - 65 of ouder:
"Senior"
- Jonger dan 18:
Oefening 5 — Loops
For-loop
- Maak een script
mappen_aanmaken.shdat drie mappen aanmaakt:project_1,project_2enproject_3. Gebruik eenfor-loop over een lijst van nummers. - Breid het script uit zodat het in elke map ook een leeg bestand
READMEaanmaakt.
While-loop
- Maak een script
aftellen.shdat van 10 aftelt naar 0 en dan"Lancering!"afdrukt. Gebruik eenwhile-loop.
Bestanden verwerken
- Maak een bestand
namen.txtmet vijf namen (één per regel). - Maak een script
begroet_lijst.shdat het bestand regel per regel leest en elke naam begroet:"Hallo, [naam]!".
Oefening 6 — Functies
-
Maak een script
rekenmachine.shmet twee functies:optellenenaftrekken. Elke functie verwacht twee argumenten en drukt het resultaat af.Voorbeeld:
optellen 5 3 # drukt "8" afaftrekken 10 4 # drukt "6" af -
Roep beide functies aan vanuit het script met testwaarden.
-
Breid het script uit met een functie
controleer_getaldie 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.