Ga naar inhoud

Bash-scripts: Uitgebreide Uitleg en Voorbeelden

Wat is Bash?

  • Bash = Bourne Again SHell, de meest gebruikte shell op Linux-systemen.
  • Je kunt er zowel interactief commando’s mee uitvoeren als scripts schrijven.
  • Bash is standaard aanwezig op bijna elke Linux-distributie.

Je eerste script

Voorbeeld: Hallo wereld

#!/usr/bin/env bash

echo "Hallo wereld!"
  • De eerste regel (#!/usr/bin/env bash) heet een shebang en vertelt het systeem dat dit script met Bash moet worden uitgevoerd.
  • echo is een commando dat tekst naar het scherm schrijft. Het is een basis-commando van Linux, niet PHP.

Uitvoeren:

chmod +x hallo.sh
./hallo.sh

Variabelen gebruiken

#!/usr/bin/env bash

NAAM="Alice"
echo "Hallo $NAAM, welkom bij Bash!"
  • Je definieert variabelen zonder spaties rond =.
  • Je roept ze aan met $NAAM.

If/Else-condities

#!/usr/bin/env bash

BESTAND="/etc/passwd"

if [[ -f "$BESTAND" ]]; then
  echo "Bestand $BESTAND bestaat."
else
  echo "Bestand $BESTAND bestaat NIET."
fi
  • [[ -f ... ]] test of een bestand bestaat.
  • Handig voor checks voordat je een script uitvoert.

Loops

Voorbeeld: over bestanden loopen

#!/usr/bin/env bash

for bestand in *.txt; do
  echo "Verwerk: $bestand"
done
  • Dit script loopt door alle .txt bestanden in de huidige map.
  • Voor elke iteratie print het de bestandsnaam.

Voorbeeld: while loop met tellen

#!/usr/bin/env bash

teller=1
while [[ $teller -le 5 ]]; do
  echo "Iteratie $teller"
  ((teller++))
done

Functies

#!/usr/bin/env bash

groet() {
  echo "Hallo $1"
}

groet "Alice"
groet "Bob"
  • Functies maken je script overzichtelijker.
  • $1 is het eerste argument dat je meegeeft.

Backups maken

#!/usr/bin/env bash
set -euo pipefail

SRC="/data/app"
DST="/data/backup"
ARCHIVE="$DST/backup-$(date +%Y%m%d-%H%M%S).tar.gz"

mkdir -p "$DST"
tar -czf "$ARCHIVE" -C "$SRC" .

echo "Backup gemaakt: $ARCHIVE"
  • Maakt een gecomprimeerde .tar.gz backup.
  • Handig voor cronjobs of systemd-timers.

Logging toevoegen

#!/usr/bin/env bash

LOG="/var/log/mijnscript.log"

echo "$(date) - Script gestart" >> "$LOG"
sleep 1
echo "$(date) - Script klaar" >> "$LOG"
  • >> betekent: append (regel toevoegen).
  • Met logs kun je later terugzien wat er is gebeurd.

Bestanden bewerken met grep, sed, awk

Zoeken in bestanden (grep):

grep "root" /etc/passwd

Tekst vervangen in bestand (sed):

sed -i 's/foo/bar/g' bestand.txt

Specifieke kolommen tonen (awk):

awk -F: '{print $1, $3}' /etc/passwd
  • grep β†’ zoeken in tekst
  • sed β†’ zoeken & vervangen
  • awk β†’ kolommen en tekst verwerken

Best practices

  1. Gebruik altijd een shebang:

    #!/usr/bin/env bash
    

  2. Fouten laten stoppen:

    set -euo pipefail
    

  3. Commentaar toevoegen om uit te leggen wat je code doet.

  4. Scripts uitvoerbaar maken:

    chmod +x script.sh
    

  5. Exit-codes gebruiken:

  6. exit 0 β†’ succes
  7. exit 1 β†’ fout

Veelgebruikte Bash-commando’s

Command Uitleg
echo "tekst" Print tekst naar scherm of bestand
date Huidige datum/tijd
tar -czf archief.tar.gz map/ Maak archief van map
grep patroon bestand Zoek patroon in bestand
sed -i 's/oud/nieuw/g' bestand Vervang tekst
awk -F: '{print $1}' bestand Print eerste kolom
find /pad -type f -name "*.log" Zoek bestanden
chmod +x script.sh Script uitvoerbaar maken
exit 1 Script afsluiten met foutcode