web analytics

Bash – shell scripting: cheat sheet

Op deze pagina vind u de meest belangrijke informatie om shellscripts te schrijven in de Bourne Again Shell (Bash).

Condities:

If-statement

if [ condition ]
then
    command 1
    command 2
    ...
fi

Deze if-conditie ondersteund zowel bestandsoperatoren, numerieke operatoren als stringoperatoren.
Wanneer er een && of ||-operator gebruikt wordt, dient de if-statement er als volgt uit te zien:

if [[ condition1 && condition2 ]]
then
    command 1
    command 2
    ...
fi

while-loop

while [ condition ]
do
    command 1
    command 2
    ...
done

Deze while-loop ondersteund zowel bestandsoperatoren, numerieke operatoren als stringoperatoren.
Wanneer er een && of ||-operator gebruikt wordt, dient de while-loop er als volgt uit te zien.

while [[ condition1 && condition2 ]]
do
    command1
    command2
    ...
done

for-loop
Er bestaan verschillende varianten van de for-loops. We zullen er enkele overlopen. De eerste variant ziet er als volgt uit:

for arg in arg1 arg2 arg3 ...
do
   command 1
   command 2
   ...
done

Een 2e variant kan er bijvoorbeeld zo uitzien:

for file in *
do
   echo $file
   ...
done

Deze for-loop zal bijvoorbeeld alle bestanden die aanwezig zijn in je working directory uitprinten.

Vergelijkingsoperatoren:

Bestandsoperatoren:
-d bestand: True als bestand een directory is
-f bestand: True als bestand een gewoon bestand (regular file) is
-r bestand: True als bestand leesbaar is
-s bestand: True als bestand niet leeg is
-t filedes: True als filedescriptor filedes geassocieerd is met de terminal
-w bestand: True als bestand schrijfbaar is
-x bestand: True als bestand uitvoerbaar is

Gebruik:

if [ -d $file ]
then
    echo "$file is een map!"
fi

Numerieke operatoren:
int1 -eq int2: True als int1 en int2 gelijk zijn
int1 -ge int2: True als int1 groter is dan of gelijk aan int2
int1 -gt int2: True als int1 groter is dan int2
int1 -le int2: True als int1 kleiner is dan of gelijk aan int2
int1 -lt int2: True als int1 kleiner is dan int2
int1 -ne int2: True als int1 verschillend is van int2

Gebruik:

if [ $int1 -eq $int2 ]
then
    echo "$1 is gelijk aan $2!"
fi

Stringoperatoren:
string: True als string niet de lege string is
str1=str2: True als str1 en str2 gelijk zijn
str1!=str2 True als str1 en str2 verschillend zijn
-n str: True als de lengte van str groter is dan 0
-z str: True als de lengte van str gelijk is aan 0

Gebruik:

if [ "$str1" == "$str2" ]
then
    echo "Deze strings zijn gelijk aan elkaar!"
fi

Het is ook mogelijk om al deze vergelijkingsoperatoren om te draaien. Dit kan je doen door er simpelweg een ! voor te plaatsen zoals in het volgende voorbeeld:

if [ ! -r $file1 ]
then
    echo "Bestand $file1 is niet leesbaar!"
fi

Getopts:

Getopts is een handig hulpmiddel dat in de bash-shell ingebakken zit. Je kan het gebruiken om opties die meegegeven worden aan een shellscript te verwerken op een geautomatiseerde manier. Zo moet je nu zelf geen rekening houden met het feit of de opties als -ab of -a -b opgegeven worden.

Voorbeeld:

while getopts ":f:cd" arg
do
    case $arg in
       f ) #Verwerken van optie -f
       command 1
       variabele=$OPTARG
       ...
       ;;
       c ) #Verwerken van optie -c
       command 1
       ...
       ;;
       d ) #Verwerken van optie -d
       command 1
       ...
       ;;
       \? ) #Verwerken van onbekende opties
       echo "Dit is geen geldige optie"
       exit 1
       ;;
    esac
done
shift $((OPTIND - 1))
#Verdere normale werking van het shellscript

De $OPTARG-variabele bevat het argument dat meegegeven werd aan een optie. Je moet wel aan getopts duidelijk maken dat een bepaalde optie argumenten met zich kan meebrengen door er een dubbele punt (:) na te plaatsen. In het bovenstaand voorbeeld heeft de optie -f bijvoorbeeld een extra argument en de andere opties niet. Op het einde van het voorbeeld doen we shift $((OPTIND – 1)) waardoor alle opties uit de lijst met argumenten meegegeven aan dit shellscript verdwijnen. Het dubbele punt aan het begin van de opties-string, zoals hier: :f:cd onderdrukt de meldingen van getopts.

Arrays:

Net zoals in andere programmeertalen en scriptingtalen kan je in bash ook gebruik maken van arrays. De belangrijkste eigenschappen van deze arrays worden hier even opgesomd.

Je kan een array aanmaken door dit uit te voeren:

eenArray[0]="1e element"
eenArray[1]="2e element"
eenArray[2]="3e element"
....

Merk op dat in een array de index bij 0 begint en niet bij 1. Het eerste element bevindt zich dus op index 0!
${#eenArray[*]} geeft de lengte van het array “eenArray” terug, terwijl ${#eenArray[i]} de lengte van het element dat zich op index i bevindt teruggeeft. Dit ${eenArray[@]} geeft alle elementen van het array terug. Als je een array aanroept in bash, moet je verplicht gebruik maken van de {- en }-haakjes! Zoals in dit voorbeeld:

echo ${eenArray[0]}
echo ${eenArray[1]}
...

Functies:

Functies in bash zien er als volgt uit:

functienaam ( ) {
    command 1
    command 2
    ...
}

Je kan een functie oproepen door de functienaam als commando te gebruiken zoals in het volgende voorbeeld:

mijnfunctie ( ) {
    echo "Hello world!"
}
...
mijnfunctie

Bash gaat na het uitvoeren van mijnfunctie terugspringen naar de commando’s die na de oproep komen.

Leave a Reply

Your email address will not be published. Required fields are marked *