mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-11-24 06:53:08 +03:00
236 lines
6.6 KiB
Markdown
236 lines
6.6 KiB
Markdown
|
---
|
||
|
category: tool
|
||
|
tool: bash
|
||
|
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:
|
||
|
- ["Jeroen Deviaene", "https://www.github.com/jerodev"]
|
||
|
lang: nl-nl
|
||
|
filename: LearnBash.sh
|
||
|
---
|
||
|
|
||
|
Bash is de naam van den unix shell, deze wordt gebruikt voor het GNU operating system en is de standaard shell op Linux en Mac OS X.
|
||
|
Bijna alle voorbeelden hier onder 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.
|
||
|
|
||
|
# Simpel hello world voorbeeld:
|
||
|
echo Hello world!
|
||
|
|
||
|
# Elke command start op een nieuwe lijn, of achter een puntkomma (;):
|
||
|
echo 'Dit is de eerste lijn'; echo 'Dit is de tweede lijn'
|
||
|
|
||
|
# Een varialbe declareren gebeurt op volgende manier:
|
||
|
Variabele="Een string"
|
||
|
|
||
|
# Maar niet op deze manier:
|
||
|
Variabele = "Een string"
|
||
|
# Bash ziet variable als een commando en zal een error geven omdat dit commando
|
||
|
# niet bestaat.
|
||
|
|
||
|
# Of op deze manier:
|
||
|
Variabele= 'Een string'
|
||
|
# Bash zal 'Een string' zien als een commanda 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!
|
||
|
|
||
|
# We hebben ook 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
|
||
|
```
|