learnxinyminutes-docs/nl/bash.md

233 lines
6.6 KiB
Markdown
Raw Normal View History

---
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
---
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.
[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:
echo Hello world!
2018-01-19 08:43:50 +00:00
# Elk commando start op een nieuwe lijn, of achter een puntkomma (;):
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:
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
# 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
# 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
# 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
```