LX-SCR-INFO-variabelen
Updated 7/31/2010 16:13
variabelen
- variabelen: soorten en gebruik
Binnen in een script kunnen we geheugenplaatsen reserveren waarin we tijdelijk gegevens kunnen opslaan. Dat kan een tussenoplossing zijn, een datum, een stuk van een parameter, een teller en zo meer. Dit zijn onze lokale variabelen. Ze houden op te bestaan als ons script stopt.
- naam
De naam van een variabele moet beginnen met een grote of een kleine letter of met een underscore. Verder mag de variabele naam ook nog cijfers bevatten (maar dus niet als eerste karakter).
- toewijzing
Als we een variabele een waarde toewijzen doen we dat als volgt:
<variabele>=<waarde>
Er zijn geen spaties tussen de twee leden van de toewijzing en het = teken.
De waarde staat meestal tussen quotes.
Locale variabelen schrijven we meestal in kleine letters, globale in hoofdletters. (dit is echter geen regel maar een conventie die niet hoeft gevolgd te worden)
Toets op je terminal hetvolgende in (het $ teken is de shell prompt en moet je niet intikken):
$ toetsenbord="azerty"
- waarde
Om de waarde van een variabele te gebruiken of zichtbaar te maken plaatsen we een dollar-teken voor zijn naam:
$ echo $toetsenbord
azerty
- readonly
We kunnen een variabele readonly maken als volgt:
$ toetsenbord="azerty"
$ readonly toetsenbord
$ toetsenbord="qwerty"
bash: toetsenbord: readonly variable
- export
We kunnen variabelen exporteren naar dochter-shells en hun commando's.
$ export http_proxy="http://192.168.0.4:3128"
Er zijn geen variabele types in bash. Er is geen onderscheid tussen string, integer, reëel getal of wat dan ook. We noemen ze untyped. Meestal geeft de context aan met welk type variabele we werken. Het is aan de script-programmer om bij te houden welk type inhoud in welke variabele thuis hoort.
We kunnen variabelen leegmaken door niets te schrijven achter het gelijkheidsteken van de toewijzing:
$ toetsenbord=
De lengte van een variabele komen we te weten met ${#varname} als in het volgende voorbeeld:
$ toetsenbord=azerty
$ echo $toetsenbord
azerty
$ echo ${#toetsenbord}
6
$ toetsenbord=
$ echo ${#toetsenbord}
0
- voorbeelden
zo eenvoudig mogelijk:
#!/bin/bash
#
# varhello: brengt hello world op scherm met behulp van een variabele
#
goeiedag="Hello World!"
echo $goeiedag
een backup scriptje:
#!/bin/bash
#
# back2u: maakt een backup naar een mountpoint op het netwerk
#
mijnhome=$HOME # jouw home directory wordt gebruikt
mijnnet="/mnt/intec-dfs/$USER" # je eigen net directory
# de kopieer opdracht:
cp -rvpdu $mijnhome $mijnnet
echo "backup finished, back2u $USER "
het vorige backup script maar ditmaal met parameters:
#!/bin/bash
#
# back2u2: maakt een backup naar een mountpoint op het netwerk
# gebruik: backpar <destination>
#
mijnhome=$HOME # jouw home directory wordt gebruikt
mijnnet=$1 # je eigen netwerk directory
# de kopieer opdracht:
cp -rvpdu $mijnhome $mijnnet
echo "backup finished, dank u $USER "
- environment en shell variabelen
Er zijn environment variabelen (ook global genoemd); die zijn beschikbaar in alle shells, en je kan ze op scherm brengen met:
$ env
TERM=xterm
SHELL=/bin/bash
USER=bert
USERNAME=bert
DESKTOP_SESSION=gnome
PATH=/home/bert/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/home/bert
GDM_KEYBOARD_LAYOUT=be
LANG=en_US.utf8
HOME=/home/bert
LOGNAME=bert
DISPLAY=:0.0
COLORTERM=gnome-terminal
... (ingekort)
Er zijn ook shell variabelen; die zijn nodig om de shell op de juiste manier te laten functioneren. PATH, PWD en PS1 zijn van dit type. Shell en environment variabelen overlappen mekaar gedeeltelijk. We kunnen de shell variabelen op scherm brengen met:
$ set | less
BASH=/bin/bash
BASH_ALIASES=()
BASH_CMDS=()
BASH_VERSION='4.1.5(1)-release'
COLORTERM=gnome-terminal
COLUMNS=100
DISPLAY=:0.0
EUID=1000
GDMSESSION=gnome
GDM_KEYBOARD_LAYOUT=be
HISTFILE=/home/bert/.bash_history
HOME=/home/bert
HOSTNAME=lx08
IFS=$' \t\n'
LINES=60
LOGNAME=bert
MACHTYPE=x86_64-pc-linux-gnu
OSTYPE=linux-gnu
PATH=/home/bert/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
PS2='> '
PS4='+ '
PWD=/home/bert
SHELL=/bin/bash
TERM=xterm
UID=1000
USER=bert
USERNAME=bert
... (ingekort)
- oefeningen
- Schrijf een script met de naam "envelop" dat vraagt om een aanspreektitel, een voornaam en een naam, een adreslijn1 (straat en nummer), een adreslijn2 (soms heb je twee adresregels nodig), een postcode en een plaatsnaam.
Maak ook een read only variabele aan met als naam "land" en als waarde "belgië".
Druk daarna de gegevens af op scherm, zoals ze normaal op een envelop zouden worden geschikt.
- Schrijf een script met als naam varipar, dat twee parameters aanvaardt, en deze als één string toewijst aan een variabele. (Dat is heel simpel, strings worden gewoon achter mekaar geschreven bij een toewijzing - denk aan de uitbreiding van PATH)