Wat is Bash en hoe gebruik je de shell?
Auteur: Redactie Domeny.ForSale Gepubliceerd
In het kort: Bash is een systeem-shell: een programma dat opdrachten van de gebruiker leest en laat uitvoeren. Je kunt er bestanden mee beheren, programma’s starten en terugkerende taken automatiseren met scripts. Bash wordt veel gebruikt in Linux, is ook beschikbaar in macOS en kan in Windows onder meer via WSL of Git Bash worden gebruikt.
Waarvoor gebruik je Bash?
De naam Bash staat voor Bourne Again SHell en verwijst naar de eerdere Bourne-shell. De naam speelt ook met het Engelse ‘born again’, oftewel ‘herboren’. Bash is zowel een interactief hulpmiddel om opdrachten te geven als een scripttaal. Een script is een tekstbestand met instructies die door een interpreter worden uitgevoerd — in dit geval Bash.
In de interactieve modus typ je een opdracht en krijg je meteen het resultaat. In een script leg je een reeks handelingen vast die je later opnieuw kunt uitvoeren, zonder elke stap handmatig te herhalen.
Bash is onder meer handig voor:
- bestanden zoeken, kopiëren en ordenen;
- ontwikkeltools en tests uitvoeren;
- de tekstuitvoer van andere programma’s verwerken;
- beheertaken op een server automatiseren.
In plaats van tientallen rapporten handmatig naar de juiste map te verplaatsen, kun je die handeling bijvoorbeeld met één opdracht beschrijven. Als je ook voorwaarden moet controleren en meldingen moet vastleggen, is een script handiger.
Bash, de terminal en opdrachten zijn verschillende dingen
Een terminal is de interface waarin je tekst invoert en antwoorden leest. Op een pc is dat meestal een toepassing die een terminal emuleert. De shell werkt binnen zo’n sessie en interpreteert de ingevoerde instructies. Bash is een van de shells; andere zijn bijvoorbeeld Zsh, Fish en PowerShell.
Een terminal openen betekent dus niet automatisch dat je Bash gebruikt. Bij nieuwere macOS-installaties is Zsh meestal de standaardshell. Een terminal in Windows kan bijvoorbeeld PowerShell of een Linux-omgeving openen.
Niet elke opdracht die je in Bash gebruikt, maakt deel uit van Bash zelf. cd, waarmee je van map wisselt, is een ingebouwde opdracht. ls, grep en mkdir zijn daarentegen meestal afzonderlijke programma’s die door de shell worden gestart. Welke tools beschikbaar zijn en welke opties ze ondersteunen, hangt af van de omgeving.
Bash kan programma’s met elkaar verbinden via een pipe, aangeduid met het teken |. Een pipe geeft de standaarduitvoer van de ene opdracht door aan de standaardinvoer van de volgende:
printf '%s\n' 'rapport.txt' 'foto.jpg' | grep '\.txt$'
Hier geeft printf twee namen weer en selecteert grep de regel die eindigt op .txt. Dit filtert alleen tekst: het voorbeeld maakt geen bestanden aan en zoekt ook geen bestanden op de schijf.
Controleren of Bash beschikbaar is en Bash starten
In Linux is Bash vaak al geïnstalleerd. Ook macOS levert Bash mee, al kan de meegeleverde versie verschillen van de versies in andere omgevingen. Typ het volgende in de terminal om te controleren of het programma beschikbaar is en welke versie het heeft:
bash --version
Deze controle bevestigt niet dat je huidige sessie Bash gebruikt. De opdracht start alleen het beschikbare programma met de optie om de versie te tonen. Met bash start je een sessie van deze shell en met exit beëindig je die. Binnen Bash kun je de versie van de huidige shell opvragen met printf '%s\n' "$BASH_VERSION".
In Windows zijn er twee populaire oplossingen met verschillende toepassingen. WSL, het Windows-subsysteem voor Linux, maakt het mogelijk een Linux-omgeving te gebruiken. Git Bash biedt Bash en een verzameling tools die onder meer handig zijn bij het werken met Git, maar is geen volledige Linux-omgeving. Raadpleeg de documentatie van Microsoft of Git for Windows voor de actuele installatievereisten.
Je eerste script in een veilige testmap
Het volgende voorbeeld maakt twee lege rapporten aan en verplaatst ze naar een submap. Maak eerst een nieuwe werkmap aan en ga naar die map:
mkdir bash-test
cd bash-test
Kies een andere naam als de map al bestaat. Ga pas verder wanneer je met succes naar de nieuwe map bent gegaan. Maak daarin met een teksteditor het bestand ordenen.sh aan met de volgende inhoud:
#!/usr/bin/env bash
map="rapporten"
mkdir -p "$map" || exit 1
touch rapport-01.txt rapport-02.txt || exit 1
for bestand in rapport-*.txt; do
mv -- "$bestand" "$map/" || exit 1
done
printf 'Rapporten verplaatst naar de map: %s\n' "$map"
De eerste regel, de shebang, geeft aan welke interpreter moet worden gebruikt wanneer je het bestand rechtstreeks uitvoert. De variabele map bevat de naam van de doelmap. De for-lus herhaalt de handeling voor elke bestandsnaam die aan het patroon voldoet. || exit 1 stopt het script als de vorige opdracht een fout meldt.
Voer het script uit en controleer het resultaat:
bash ordenen.sh
ls rapporten
Bij deze manier van uitvoeren hoeft het bestand geen uitvoerrechten te hebben: je kiest de interpreter met de opdracht bash. Aanhalingstekens rond variabelen voorkomen onder meer dat namen met spaties in afzonderlijke argumenten worden opgesplitst.
Wanneer gebruik je Bash en waar moet je op letten?
Bash is een goede keuze als een taak vooral bestaat uit het combineren van bestaande tools en het bewerken van bestanden. Bij uitgebreide logica, complexe gegevensstructuren of een grotere toepassing is Python of een andere algemene programmeertaal vaak overzichtelijker en gemakkelijker te testen.
Opdrachten worden uitgevoerd met de rechten van de gebruiker die ze start. Een bestand verwijderen met rm verplaatst het doorgaans niet naar de prullenbak. Omleiden met > kan de inhoud van een bestaand bestand overschrijven. Voer gekopieerde instructies niet uit met sudo zolang je niet begrijpt wat ze doen. Met die tool kun je opdrachten uitvoeren met de rechten van een andere gebruiker.
Pas om te beginnen het voorbeeldscript aan zodat het met printf alleen bestandsnamen weergeeft, in plaats van bestanden te verplaatsen met mv. De lijst controleren voordat je wijzigingen uitvoert is een eenvoudige gewoonte die ook van pas komt wanneer je met echte gegevens werkt.
