Veelvoorkomende problemen
Bash is de standaardshell op zowat elk Linux-systeem en het scripten ervan is een kernvaardigheid voor iedereen die servers beheert. Dit artikel legt uit wat Bash is, hoe u de geschiedenis en expansie gebruikt, en hoe u een eerste werkend shellscript schrijft. Gericht op systeembeheerders en ontwikkelaars die met Linux werken.
Vereisten
- Een Linux-systeem met Bash versie 4.0 of hoger (controleer 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 uw 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 uw thuismap. 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 voert u 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 u 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 u aanroept.
7. Combineer commando’s met pipes en redirection
Bash laat u 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, ziet u de melding dat de map bestaat of is aangemaakt, en toont `ls -la` de inhoud van de map. De exit-code van het script controleert u 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. Controleer 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 uw 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 of u Bash nodig hebt, maar wanneer u het gaat gebruiken.