LX-SCR-INFO-variabelen
Updated 7/31/2010 16:13

variabelen

  1. 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.

  2. 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).

  3. 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"

  4. waarde

    Om de waarde van een variabele te gebruiken of zichtbaar te maken plaatsen we een dollar-teken voor zijn naam:

    $ echo $toetsenbord
    azerty

  5. readonly

    We kunnen een variabele readonly maken als volgt:

    $ toetsenbord="azerty"
    $ readonly toetsenbord
    $ toetsenbord="qwerty"
    bash: toetsenbord: readonly variable

  6. 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

  7. 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 "

  8. 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)


  9. oefeningen

    1. 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.

    2. 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)