2016-06-16 13:21:35 +00:00
|
|
|
---
|
|
|
|
contributors:
|
|
|
|
- ["Max Yankov", "https://github.com/golergka"]
|
|
|
|
- ["Darren Lin", "https://github.com/CogBear"]
|
|
|
|
- ["Alexandre Medeiros", "http://alemedeiros.sdf.org"]
|
|
|
|
- ["Denis Arh", "https://github.com/darh"]
|
|
|
|
- ["akirahirose", "https://twitter.com/akirahirose"]
|
|
|
|
- ["Anton Strömkvist", "http://lutic.org/"]
|
|
|
|
- ["Rahil Momin", "https://github.com/iamrahil"]
|
|
|
|
- ["Gregrory Kielian", "https://github.com/gskielian"]
|
|
|
|
- ["Etan Reisner", "https://github.com/deryni"]
|
|
|
|
translators:
|
2016-06-16 13:22:06 +00:00
|
|
|
- ["Jeroen Deviaene", "https://www.github.com/jerodev"]
|
|
|
|
filename: LearnBash-nl.sh
|
2016-06-16 13:21:35 +00:00
|
|
|
---
|
|
|
|
|
2021-05-25 11:42:50 +00:00
|
|
|
Bash is de naam van de unix shell, deze wordt gebruikt voor het GNU operating system en is de standaard shell op Linux en macOS.
|
2018-01-19 08:43:50 +00:00
|
|
|
Bijna alle voorbeelden hieronder kunnen deel uitmaken van een shell script of kunnen uitgevoerd worden in de shell.
|
2016-06-16 13:21:35 +00:00
|
|
|
|
|
|
|
[Lees er meer over hier.](http://www.gnu.org/software/bash/manual/bashref.html)
|
|
|
|
|
|
|
|
```bash
|
|
|
|
#!/bin/bash
|
|
|
|
# De eerste lijn in het schript is shebang, deze laat het systeem weten hoe
|
|
|
|
# het script uitgevoerd moet worden: http://en.wikipedia.org/wiki/Shebang_(Unix)
|
|
|
|
# Zoals je kan zien wordt # gebruikt om een commentaar lijn te starten.
|
|
|
|
|
2018-01-19 08:43:50 +00:00
|
|
|
# Een simpel hello world voorbeeld:
|
2016-06-16 13:21:35 +00:00
|
|
|
echo Hello world!
|
|
|
|
|
2018-01-19 08:43:50 +00:00
|
|
|
# Elk commando start op een nieuwe lijn, of achter een puntkomma (;):
|
2016-06-16 13:21:35 +00:00
|
|
|
echo 'Dit is de eerste lijn'; echo 'Dit is de tweede lijn'
|
|
|
|
|
2018-01-19 08:43:50 +00:00
|
|
|
# Een variabele declareren gebeurt op volgende manier:
|
2016-06-16 13:21:35 +00:00
|
|
|
Variabele="Een string"
|
|
|
|
|
|
|
|
# Maar niet op deze manier:
|
|
|
|
Variabele = "Een string"
|
2018-01-19 08:43:50 +00:00
|
|
|
# Bash ziet variabelen als een commando en zal een error geven omdat dit commando
|
2016-06-16 13:21:35 +00:00
|
|
|
# niet bestaat.
|
|
|
|
|
|
|
|
# Of op deze manier:
|
|
|
|
Variabele= 'Een string'
|
2018-01-19 08:43:50 +00:00
|
|
|
# Bash zal 'Een string' zien als een commando en een error geven omdat het niet
|
2016-06-16 13:21:35 +00:00
|
|
|
# gevonden kan worden.
|
|
|
|
|
|
|
|
# Variabelen gebruiken:
|
|
|
|
echo $Variabele
|
|
|
|
echo "$Variabele"
|
|
|
|
echo '$Variabele'
|
|
|
|
# Wanneer je een variable wil toekennen, exporteren of nog anders gebruik je
|
|
|
|
# de naam zonder '$'. Als je de waarde van de variabele wilt, gebruik je een
|
|
|
|
# '$' voor de naam.
|
|
|
|
|
|
|
|
# Strings vervangen in variables
|
|
|
|
echo ${Variabele/Een/De}
|
|
|
|
# Dit zal 'Een' vervangen door 'De' in de string
|
|
|
|
|
|
|
|
# Substring
|
|
|
|
Length=7
|
|
|
|
echo ${Variabele:0:Length}
|
|
|
|
# Dit zal de eerste 7 tekens van de string weergeven.
|
|
|
|
|
|
|
|
# Standaard waarde voor variabele
|
|
|
|
echo ${Foo:-"StandaardwaardeAlsFooLeegIsOfNietBestaat"}
|
|
|
|
# Dit werkt voor null en lege strings (Foo=""). Dit werkt niet voor 0 (Foo=0).
|
|
|
|
# Merk op dat dit enkel de waarde retourneerd en de variable niet aanpast.
|
|
|
|
|
|
|
|
|
|
|
|
# Ingebouwde variabelen:
|
|
|
|
# Er zijn enkele zeer handige ingebouwde variabelen, zoals:
|
|
|
|
echo "Return waarde van laatste programma: $?"
|
|
|
|
echo "PID van dit script: $$"
|
|
|
|
echo "Aantal argumenten voor dit script: $#"
|
|
|
|
echo "Alle argumenten voor dit script: $@"
|
|
|
|
echo "Argumenten voor dit script in apparte variabelen: $1 $2..."
|
|
|
|
|
|
|
|
# Een waarde lezen via input:
|
|
|
|
echo "Wat is uw naam?"
|
|
|
|
read Naam # Merk op dat we geen variabele gedeclareerd hebben
|
|
|
|
echo Hallo, $Naam!
|
|
|
|
|
2018-01-19 08:43:50 +00:00
|
|
|
# We hebben ook logische if structuren
|
2016-06-16 13:21:35 +00:00
|
|
|
# Gebruik 'man test' voor meer informatie over condities.
|
|
|
|
if [ $Naam -ne $USER ]
|
|
|
|
then
|
|
|
|
echo "Uw naam is niet gelijk aan de gebruikersnaam"
|
|
|
|
else
|
|
|
|
echo "Uw naam is de gebruikersnaam"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# MERK OP: als $Naam leeg is ziet bash het bovenstaande als volgt:
|
|
|
|
if [ -ne $USER ]
|
|
|
|
# dit is ongeldige syntax
|
|
|
|
# Dus de beter manier om dit te schrijven is
|
|
|
|
if [ "$Naam" -ne $USER ] ...
|
|
|
|
# Als naam nu leeg is, ziet bash nu nog steeds
|
|
|
|
if [ "" -ne $USER ] ...
|
|
|
|
# Dit werkt wel zoals het hoort
|
|
|
|
|
|
|
|
# Er is ook conditionele executie
|
|
|
|
echo "Altijd uitvoeren" || echo "Enkel uitvoeren als vorige command mislukt"
|
|
|
|
echo "Altijd uitvoeren" && echo "Enkel uitvoeren als vorige command NIET mislukt"
|
|
|
|
|
|
|
|
# Om && en || te gebruiken in if structuren moeten vierkante haken gebruikt worden:
|
|
|
|
if [ "$Naam" == "Steve" ] && [ "$Leeftijd" -eq 15 ]
|
|
|
|
then
|
|
|
|
echo "Dit wordt uitgevoerd als $Naam Steve is en $Leeftijd 15 is."
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Expressies worden gemaakt met volgende syntax:
|
|
|
|
echo $(( 10 + 5 ))
|
|
|
|
|
|
|
|
# Bash werkt steeds in de context van een huidige map in het bestandssysteem.
|
|
|
|
# Bestanden en mappen in de huidige map kunnen weergegeven worden met het ls
|
|
|
|
# commando.
|
|
|
|
ls
|
|
|
|
|
|
|
|
# Commandos hebben opties die de uitvoer beinvloeden
|
|
|
|
ls -l # Lijst elk bestand en map op een nieuwe lijn.
|
|
|
|
|
|
|
|
# Resultaten van een vorig commando kunnen doorgegeven worden aan een volgend
|
|
|
|
# commando als input.
|
|
|
|
# Het grep commando filter de input met een bepaald patroon. Op deze manier kunnen
|
|
|
|
# we alle .txt bestanden weergeven in de huidige map.
|
|
|
|
ls -l | grep "\.txt"
|
|
|
|
|
|
|
|
# Commando's kunnen gekoppeld worden met andere commando's door gebruik te maken van
|
|
|
|
# $( ):
|
|
|
|
# Het volgende commando geeft het aantal bestanden weer in de huidige map
|
|
|
|
echo "Er zijn hier $(ls | wc -l) bestanden."
|
|
|
|
|
|
|
|
# Het zelfde kan gedaan worden met `, maar die kunnen niet genest worden. De methode
|
|
|
|
# bij voorkeur is om $( ) te gebruiken.
|
|
|
|
echo "Er zijn hier `ls | wc -l` bestanden."
|
|
|
|
|
|
|
|
# Bash heeft een case statement dat werkt zoals in Java en C++
|
|
|
|
case "$Variabele" in
|
|
|
|
0) echo "Er is een 0";;
|
|
|
|
1) echo "Er is een 1";;
|
|
|
|
*) echo "Er is iets";;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# For lussen itereren over de gegeven argumenten
|
|
|
|
# De waarde van $Variabele wordt hier drie keer afgeprint
|
|
|
|
for Variable in {1..3}
|
|
|
|
do
|
|
|
|
echo "$Variabele"
|
|
|
|
done
|
|
|
|
|
|
|
|
# Of schrijf een traditionele for loop op deze manier
|
|
|
|
for ((a=1; a <= 3; a++))
|
|
|
|
do
|
|
|
|
echo $a
|
|
|
|
done
|
|
|
|
|
|
|
|
# Lussen kunnen ook gebruikt worden met bestanden
|
|
|
|
# Deze lus voert het cat commando uit op file1 en file2
|
|
|
|
for Variable in file1 file2
|
|
|
|
do
|
|
|
|
cat "$Variable"
|
|
|
|
done
|
|
|
|
|
|
|
|
# Of met het output commando
|
|
|
|
for Output in $(ls)
|
|
|
|
do
|
|
|
|
cat "$Output"
|
|
|
|
done
|
|
|
|
|
|
|
|
# while lus:
|
|
|
|
while [ true ]
|
|
|
|
do
|
|
|
|
echo "body van de lus..."
|
|
|
|
break
|
|
|
|
done
|
|
|
|
|
|
|
|
# Je kan ook functies aanmaken
|
|
|
|
# Defenitie:
|
|
|
|
function foo ()
|
|
|
|
{
|
|
|
|
echo "Alle argumenten: $@"
|
|
|
|
echo "Apparte argumenten: $1 $2..."
|
|
|
|
echo "Dit is een functie"
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
# Of simpeler
|
|
|
|
bar ()
|
|
|
|
{
|
|
|
|
echo "Dit is een andere manier om functies te maken."
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
# Functies oproepen
|
|
|
|
foo "Mijn naam is" $Naam
|
|
|
|
|
|
|
|
# Enkele zeer handige commando's die je moet kennen
|
|
|
|
# print de laatste 10 lijnen van file.txt
|
|
|
|
tail -n 10 file.txt
|
|
|
|
# print de eerste 10 lijnen van file.txt
|
|
|
|
head -n 10 file.txt
|
|
|
|
# Sorteer de lijnen in file.txt
|
|
|
|
sort file.txt
|
|
|
|
# Vind dubbele lijnen in file.txt
|
|
|
|
uniq -d file.txt
|
|
|
|
# Print de eerste kolom voor het ',' karakter
|
|
|
|
cut -d ',' -f 1 file.txt
|
|
|
|
# Vervang elke 'okay' met 'great' in file.txt (werkt ook met regex)
|
|
|
|
sed -i 's/okay/great/g' file.txt
|
|
|
|
# Print alle lijnen die voldoen aan de regex naar stdout
|
|
|
|
grep "^foo.*bar$" file.txt
|
|
|
|
|
|
|
|
|
|
|
|
# Gebruik de ingebouwde help functies door het help commando te gebruiken:
|
|
|
|
help
|
|
|
|
help help
|
|
|
|
help for
|
|
|
|
help return
|
|
|
|
help source
|
|
|
|
help .
|
|
|
|
|
|
|
|
# Lees de bash documentatie met het man commando:
|
|
|
|
apropos bash
|
|
|
|
man 1 bash
|
|
|
|
man bash
|
|
|
|
|
|
|
|
# Lees bash info documentatie:
|
|
|
|
info bash
|
|
|
|
info bash 'Bash Features'
|
|
|
|
info bash 6
|
|
|
|
info --apropos bash
|
|
|
|
```
|