Opbouw bash-script

De eerste regel in een shellscript moet de shell (ook bekend als interpreter) aangeven die zal worden gebruikt om het uit te voeren. Voor Bash betekent dit

#! /bin/bash

De bovenstaande regel moet worden gevolgd door de opdrachten die door de shell moeten worden uitgevoerd, één per regel. Hoewel de voorkeuren tussen systeembeheerders kunnen variëren, bevatten effectieve en goed onderhouden shellscripts vaak de volgende secties:

Header

De scriptkop is een gedeelte met commentaar waarin de ontwikkelaar items kan opnemen zoals:

De shell negeert blanco en becommentarieerde regels. De eerste zijn alleen bedoeld als informatie voor de auteur, andere recensenten en mensen die het programma gebruiken. Om commentaar te geven op een regel, plaatst je gewoon een # -teken aan het begin. Een gemeenschappelijke koptekst ziet er als volgt uit:

# ======================================================================
# SCRIPT NAME: testscript.sh

# PURPOSE: Demonstrate simple Bash programming concepts

# REVISION HISTORY:

# AUTHOR                                DATE                    DETAILS
# --------------------- --------------- --------------------------------
# Patrick H                           2021-02-04          Initial version

# LICENSE: Noorderpoort
# ======================================================================

Body

De hoofdtekst van het script is waar de reeks opdrachten wordt geplaatst, één per regel. Een commando kan rechtstreeks door de shell worden uitgevoerd of de uitvoer kan worden opgeslagen in een container die bekend staat als variabele.

Je kunt variabelen zien als vakken waarin we een vaste waarde (zoals tekst of een getal) of de uitvoer van een commando kunnen opslaan, voor later hergebruik.

Als best practice gebruiken systeembeheerders vaak opmerkingen in de hoofdtekst om aan te geven wat een bepaalde regel code moet doen. Dit dient tevens als herinnering voor hem/haarzelf en anderen die later aan hetzelfde bestand zullen werken.

Om de uitvoer van een commando in een variabele op te slaan, plaatst je het commando tussen haakjes en zet je het voor met het dollarteken. Dus in MYVAR = $(commando), bevat de variabele MYVAR de uitvoer van een commando, waarbij het commando elk commando kan zijn dat wordt uitgevoerd door de shell. Om de inhoud van MYVAR in het script te gebruiken, voeg je $MYVAR toe waar het nodig is. Bijvoorbeeld:

echo "Starting to run the script..."
# VARIABLE ASSIGNMENT
# Show hostname:
HOST=$(hostname)
# User executing the script:
CURRENTUSER=$(whoami)
# Current date:
CURRENTDATE=$(date +%F)
# Host IP address:
IPADDRESS=$(hostname -I | cut -d ' ' -f1)

# SHOW MESSAGES
echo "Today is $CURRENTDATE"
echo "Hostname: $HOST ($IPADDRESS)"
echo "User info for $CURRENTUSER:"
grep $CURRENTUSER /etc/passwd

Laten we alles samenvoegen (#! /bin/bash, header en body) en opslaan als testscript.sh. Maak vervolgens het bestand uitvoerbaar en voer het uit:

chmod a+x testscript.sh
./testscript.sh

De volgende afbeelding toont de uitvoer van het script:

Zoals je in de bovenstaande afbeelding kunt zien, stelt de ingebouwde echo Bash ons in staat om variabelen en vaste tekst tussen dubbele aanhalingstekens in te sluiten. De inhoud van de opgegeven variabele (n) zal dus samen met de tekst deel uitmaken van de uitvoer.

Totaal plaatje script compleet