Veelgestelde problemen
Bash is de standaard shell op vrijwel elk Linux-systeem en het scripten ervan is een kernvaardigheid voor iedereen die servers beheert. Dit artikel legt uit wat Bash is, hoe je de geschiedenis en expansie gebruikt, en hoe je een eerste werkend shellscript schrijft. Gericht op systeembeheerders en developers die met Linux werken.
Vereisten
- Een Linux-systeem met Bash versie 4.0 of hoger (check met `bash --version`)
- Toegang tot een terminal en een teksteditor zoals `nano`, `vim` of `gedit`
- Basiskennis van Linux-commando’s zoals `ls`, `cd` en `cat`
Stappen
1. Controleer de Bash-versie
Voer het volgende commando uit om te zien welke versie van Bash je systeem gebruikt:bash --version
De output toont de versie, bijvoorbeeld `GNU bash, version 5.2.21(1)-release`. Werk met minimaal versie 4.0, omdat oudere versies sommige functionaliteit zoals associatieve arrays missen.
2. Bekijk de commandogeschiedenis
Bash slaat eerder ingevoerde commando’s op in het verborgen bestand `.bash_history` in je home-directory. Toon de lijst met:history
Dit geeft genummerde regels terug, bijvoorbeeld `123 ls -la`. De geschiedenis staat standaard aan en registreert commando’s per sessie.
3. Gebruik geschiedenis-expansie
Met uitroeptekens voer je eerdere commando’s opnieuw uit zonder ze opnieuw te typen. De drie meest gebruikte vormen:!! # herhaalt het laatste commando
!123 # voert commando op regel 123 uit
!grep # voert het laatste commando uit dat met 'grep' begonDeze expansie werkt alleen in interactieve shells, niet in scripts. Het bespaart tijd bij lange of complexe commando’s die je vaker gebruikt.
4. Maak een eerste shellscript
Een shellscript is een tekstbestand met Bash-commando’s. Maak een nieuw bestand aan:nano hallo.sh
Plak de volgende inhoud in het bestand:
#!/bin/bash
echo "Hallo vanaf Pixzo"
mkdir -p /tmp/pixzo-test
echo "Map /tmp/pixzo-test is aangemaakt"De eerste regel (`shebang`) vertelt het systeem dat Bash het script moet uitvoeren. De overige regels voeren commando’s uit. Sla het bestand op met `Ctrl+O` en sluit af met `Ctrl+X`.
5. Maak het script uitvoerbaar
Zonder uitvoeringsrechten start het script niet direct. Geef die rechten met:chmod +x hallo.sh
Dit voegt het execute-bit toe aan het bestand. Controleer de rechten met `ls -l hallo.sh` — de output toont `-rwxr-xr-x`.
6. Voer het script uit
Start het script op twee manieren. Direct:./hallo.sh
Of door Bash expliciet aan te roepen:
bash hallo.sh
Beide methodes geven dezelfde output. Het verschil: met `./hallo.sh` gebruikt het systeem de interpreter uit de shebang-regel; met `bash hallo.sh` negeert het die regel en gebruikt het de Bash die je aanroept.
7. Combineer commando’s met pipes en redirection
Bash laat je commando’s koppelen. Een pipe (`|`) stuurt de output van het ene commando naar het volgende. Redirection (`>`, `<`) stuurt output naar een bestand of leest invoer uit een bestand. Een praktisch voorbeeld:ps aux | grep httpd > /tmp/httpd-processen.txt
Dit commando toont alle processen (`ps aux`), filtert op regels met `httpd` (`grep httpd`) en schrijft het resultaat naar een bestand. Bekijk het resultaat met:
cat /tmp/httpd-processen.txt
8. Voeg logica toe met variabelen en condities
Een script wordt pas nuttig met variabelen en conditionele logica. Breid `hallo.sh` uit:#!/bin/bash
DIR="/tmp/pixzo-test"
if [ -d "$DIR" ]; then
echo "$DIR bestaat al"
else
mkdir -p "$DIR"
echo "$DIR aangemaakt"
fiDe variabele `DIR` slaat het pad op. De `if`-statement controleert of de map bestaat en handelt beide gevallen af. Sla op, maak uitvoerbaar met `chmod +x hallo.sh` en voer uit:
./hallo.sh
Verificatie
Controleer of alles werkt:./hallo.sh && ls -la /tmp/pixzo-test
Als het script correct draait, zie je de melding dat de map bestaat of is aangemaakt, en toont `ls -la` de inhoud van de map. De exit-code van het script check je met:
echo $?
Een `0` betekent dat het script zonder fouten is afgelopen.
Veelgestelde problemen
Het script start niet met `./hallo.sh` en geeft `Permission denied` Het execute-bit ontbreekt. Voer `chmod +x hallo.sh` uit.`!123` werkt niet in de terminal Geschiedenis-expansie is uitgeschakeld of de regel bestaat niet. Check met `history` welke nummers beschikbaar zijn. Zet expansie aan met `set -H`.
Het script geeft `bad interpreter: /bin/bash^M` Het bestand bevat Windows-regelafbrekingen (`\r\n`). Converteer het met `sed -i 's/\r$//' hallo.sh` of sla het bestand op met Unix-regelafbrekingen in je editor.
Bash blijft de standaard in Linux-distributies, voldoet aan POSIX-specificaties en vormt de basis voor automatisering in init-scripts, CI/CD-pijplijnen en systeembeheer. De syntaxis is soms streng, maar wie eenmaal de combinatie van pipes, variabelen en condities beheerst, bouwt daarmee workflows die geen grafische tool evenaart — en de vraag is niet óf je Bash nodig hebt, maar wanneer je het gaat gebruiken.