Bash Scripting

Wat is Bash?

Het is de taal waarmee je Linux & MacOS kunt besturen via de terminal. In plaats van alles met je muis te doen, kun je met Bash direct commando’s invoeren om het systeem te bedienen. Het maakt het mogelijk om snel dingen te doen die je normaal met een grafische interface zou doen, zoals bestanden kopiëren, programma’s starten, of instellingen aanpassen.

Wat Bash echt krachtig maakt, is dat je er ook mee kunt programmeren. Dit betekent dat je taken die je normaal handmatig zou uitvoeren (zoals een reeks commando’s achter elkaar uitvoeren) kunt automatiseren met een Bash-script. Hierdoor kun je dingen sneller, efficiënter of automatisch doen, zonder steeds weer hetzelfde handmatige werk te herhalen.

Bijvoorbeeld:

Bash op servers

Linux is het meestgebruikte besturingssysteem voor servers wereldwijd. Het wordt vaak gekozen vanwege zijn stabiliteit, veiligheid, en open-source karakter. Omdat de meeste Linux-servers geen grafische gebruikersinterface (GUI) hebben, wordt alles via de terminal beheerd, wat betekent dat kennis van de Bash-shell cruciaal is voor serverbeheer.

Bijvoorbeeld:

Linux of Git Bash

Tijdens deze opdracht zullen we werken met Bash, de shell waarmee je commando’s invoert in een Linux-omgeving. Je kan op 2 manieren met Bash werken:

Je mag zelf kiezen welke optie je gebruikt om met Bash aan de slag te gaan.

Bash scripts aanmaken en uitvoeren

  1. Open de terminal
    • In de meeste Linux-distributies kun je de terminal openen door op Ctrl

Alt

T

Bash syntax

De Bang Start Code

Je bash script moet altijd beginnen met deze regel.
Zo weet het systeem dat het script met de Bash-shell moet worden uitgevoerd.

#!/usr/bin/env bash
# Je bash script moet altijd starten met deze code

# De rest van je code ...

Variabelen

naam="Maes"
echo "Hallo, $naam"
Syntax Betekenis Opmerking
naam="Maes" variabele instellen geen spaties rond =
leeftijd=18 numerieke variabele bash kent geen types
$naam waarde gebruiken altijd met $

Veelgemaakte fouten

Invoer

echo "Wat is je naam?"
read gebruikersnaam
echo "Hallo, $gebruikersnaam! Welkom bij mijn Bash-script."
Syntax Betekenis Staat voor
read -p "Naam: " naam invoer vragen p = prompt
read -s wachtwoord verborgen invoer s = silent
read -r tekst geen escape-interpretatie bij \ r = raw

Wiskundige berekeningen

Wiskundige berekeningen zet je tussen (( ... )).

Waarom?

a=4 
b=7

# Zonder (( )): tekst
echo $a + $b # Output: 4 + 7

# Met (( )): rekenen
echo $(( $a + $b )) # Output: 11

Waarom is $ nodig in echo $(( $a + $b ))?

a=4

echo a    # geeft: a
echo $a   # geeft: 4

# Dus in de som:
$(( $a + $b ))

Betekent:

Schrijfwijze Betekenis
a De string “a”
$a Waarde van de variabele a
$(( $a + $b )) Tel de waarden op

If-statement (modern Bash)

naam="Maes"
leeftijd=21

# [[ ... ]] Voor strings, bestanden en logische tests
if [[ $naam == "Maes" ]]; then
  echo "Naam klopt"
fi

# (( ... )) Voor rekenkundige vergelijkingen
# Geen gebruik van $ voor de variabele
if (( leeftijd == 21 )); then
  echo "Leeftijd klopt"
fi
Operator Betekenis
== gelijk aan
!= niet gelijk aan
< kleiner dan
<= kleiner of gelijk aan
> groter dan
>= groter of gelijk aan
-z $a String: leeg
-n $a String: niet leeg

For Loop

for ((i=1; i<=5; i++)); do
  echo "Nummer $i"
done
Vorm Betekenis Wanneer gebruiken
for i in 1 2 3 vaste lijst eenvoudige herhaling
for i in {1..5} bereik tellen
for file in *.txt bestanden alle bestanden die eindigen op .txt in deze map

While Loop (modern Bash)

count=1
while (( count <= 5 )); do
  echo "Telling: $count"
  ((count++))
done

Functies

Basis functie

functie_naam() {
  echo "Dit is een functie"
}

functie_naam

Functie met parameters

groet() {
  echo "Hallo $1"
}

groet Maes
Syntax Betekenis Opmerking
functie() { } functie definiëren standaard
functie functie oproepen zonder ()
echo "tekst" waarde “teruggeven” via output
$1, $2 parameters positie-argumenten

Opdracht 1: Automatisatie nieuw project

Je maakt vaak websites en moet telkens opnieuw dezelfde mappen aanmaken. Dat kost tijd. Daarom schrijf je een Bash-script dat dit werk automatisch voor jou doet.

Stap 1: Voorbereiding

  1. Maak een nieuw Bash-script aan.
  2. Voeg de correcte shebang toe bovenaan (#!/bin/bash).
  3. Maak het script executable zodat je het kan uitvoeren chmod +x scriptnaam.sh.
  4. Voer het script uit om te testen bash scriptnaam.sh.

Stap 2: Projectinformatie

  1. Laat het script de gebruiker vragen naar de naam van de website.
  2. Maak een map aan met de naam van de website.

Stap 3: Basisbestanden en mappen

  1. Maak in deze map de volgende bestanden en submappen aan:
    • index.html
    • style.css
    • script.js
    • images/
    • blogposts/
  2. Laat een bericht zien dat de bestanden en mappen aangemaakt zijn.
    Toon de structuur van de mappen in een boomstructuur via tree.

Stap 4: Blogposts genereren

  1. Vraag hoeveel blogposts de gebruiker wil hebben.
  2. Maak dit aantal .html bestanden aan in de map blogposts/ :
    • post-1.html
    • post-2.html
    • etc…

Stap 5: Dynamische inhoud

  1. Pas het script aan zodat de bestanden niet meer leeg zijn:
  2. De .html bestanden bevatten de correcte startcode <!DOCTYPE html>, <html>, …
  3. De bestanden laden automatisch style.css in.
  4. Pas style.css aan zodat de gebruiker zelf de achtergrondkleur en kleur van de <h1> kan kiezen. Je vraagt in je script naar deze kleuren.
  5. Toon de inhoud van style.css zodat je kan controleren of de juiste kleuren gebruikt zijn.

Stap 6: Dynamische titels en koppen

  1. Geef alle .html bestanden een dynamische title en <h1> hoofding:
    • index.html : de naam van de website
    • post-1.html : Post 1
    • post-2.html : Post 2
    • etc…

Opdracht 2: Backup- & opruimscript

Je gebruikt een Raspberry Pi als kleine server. Na een tijdje staan er veel bestanden in je home-folder: oude logs, testbestanden, tijdelijke bestanden, …

Om overzicht te houden wil je met één script:

Stap 1: Systeeminformatie tonen

Maak een script aan dat:

Stap 2: Grootte functie

Schrijf een functie die:

Stap 3: Backups maken

  1. Maak een functie die een backup maakt van een map. Deze functie krijgt 2 argumenten:
    • De naam van de map die geback-upt moet worden
    • De naam van de backup-map
  2. Voeg de datum van de backup toe aan het einde van de bestandsnaam.

Stap 4: Menu

Gebruik een while-loop om een menu te tonen dat blijft herhalen.
Het menu bevat minstens:

Zolang de gebruiker niet kiest om te stoppen, blijft het script zich herhalen.

Stap 5: Opruimen van oude bestanden

  1. Vraag aan de gebruiker:
    • Een map
    • Het aantal dagen
  2. Toon alle bestanden in de map die ouders zijn dan het opgegeven aantal dagen met die command:
    # TOON bestanden ouder dan 7 dagen
    find ~/testmap -type f -mtime +7 
      # find: zoekt bestanden/mappen
      # ~/testmap: de map waarin gezocht wordt
      # -type f: alleen gewone bestanden (geen mappen)
      # -mtime +7: bestanden die meer dan 7 dagen oud zijn
      # -delete:  verwijdert de gevonden bestanden
    
  3. Vraag of het OK is deze bestanden te verwijderen en verwijder ze met die command:
    # VERWIJDER bestanden ouder dan 7 dagen
    find ~/testmap -type f -mtime +7 -delete
    
  4. Daarna toon je:
    • Hoeveel ruimte de map in beslag nam (door gebruik te maken van je eigen functie) voor de opkuis
    • Hoeveel bestanden zijn verwijderd.
    • Hoeveel ruimte de map nu in beslag neemt (door gebruik te maken van je eigen functie).
    • Hoeveel percent kleiner de map geworden is.

Uitbreiding

Gebruik Rclone om je backup-map up te loaden naar Google Drive.

last edited on 21/01/2026
Created on 15/01/2025