Ga naar hoofdinhoud

5.4 Variabelen in de shell

Hier bouw je op verder: Tekst schrijven met echo

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

echo $USER
echo $HOME
sam
/home/sam

$USER en $HOME zijn variabelen: een naam met een waarde, net als in Python. Het dollarteken zegt tegen de : zet hier de waarde neer. De shell doet dat vóór echo start, dus echo krijgt sam te zien, niet $USER. Daarom kun je een met $USER aan iedereen geven: het werkt bij iedereen met zijn eigen naam.

Zelf een variabele maken​

NAAM=Sam
echo "Hallo $NAAM"
Hallo Sam

Rond het = staan geen spaties. Een variabele die je zelf maakt, schrijf je meestal in hoofdletters, net als USER en HOME. Hij bestaat tot je de sluit.

Tussen dubbele aanhalingstekens vult de shell een variabele in, tussen enkele niet:

echo 'Hallo $NAAM'
Hallo $NAAM

Voorspel​

Je maakt NAAM=Sam, en start daarna een nieuwe shell in de shell:

NAAM=Sam
bash
echo "[$NAAM]"
exit

Wat zet echo neer?

Klik hier als je het hebt geprobeerd
[]

Een variabele die je zo maakt, kent alleen deze shell. Een programma dat je vanuit de shell start, zoals een tweede bash, krijgt hem niet mee. Wil je dat wel, gebruik dan export:

export NAAM=Sam
bash
echo "[$NAAM]"
exit

Nu staat er [Sam]. Een variabele die meegaat naar elk programma heet een omgevingsvariabele. $USER en $HOME zijn er twee. Met printenv zie je ze allemaal, en met printenv NAAM één.

Een .env-bestand​

Een programma leest zijn instellingen vaak uit omgevingsvariabelen: een wachtwoord, een adres, of de naam van een site. Typ je die elke keer met export, dan vergeet je er een. Daarom staan ze vaak in een bestand .env, één per regel, in dezelfde vorm:

DOMEIN=gastenboek.voorbeeld.nl

De shell leest dat bestand niet vanzelf: na cat .env is $DOMEIN nog steeds leeg. Het programma zelf leest het, Docker Compose bijvoorbeeld. Een .env hoort bij één computer, en er staan vaak geheimen in. Daarom zet je hem nooit in git.

Opdracht 5.4.a: een begroeting​

Maak een variabele KLAS met de naam van je klas. Laat dan met één echo een zin zien met je eigen naam en je klas, zoals sam zit in 4H. Typ je eigen naam niet: laat de shell hem invullen.

Klik hier voor een tip

Je eigen naam staat al in een variabele die de shell kent. Gebruik dubbele aanhalingstekens.

Klik hier voor het antwoord
KLAS=4H
echo "$USER zit in $KLAS"

Met enkele aanhalingstekens staat er letterlijk $USER zit in $KLAS.

Controleer je Ubuntu

Klaar met thema 5? Typ in je bash controleer.sh 5. Het script kijkt of alles uit dit thema klopt; je downloadt het op de startpagina.

Er gaat iets mis​

NAAM: command not found​

NAAM: command not found

Oorzaak: je zette spaties rond het =, zoals NAAM = Sam. Dan denkt de shell dat NAAM een commando is, met = en Sam als woorden erachter.

Oplossing: typ het zonder spaties: NAAM=Sam. Staat er een spatie in de waarde, zet die dan tussen aanhalingstekens: NAAM="Sam de Vries".

De variabele is leeg​

echo $NAAM zet een lege regel neer.

Oorzaak: je maakte de variabele in een andere terminal, of je sloot de terminal sinds je hem maakte. Of je tikte de naam anders: $naam is een andere variabele dan $NAAM.

Oplossing: maak hem opnieuw, in deze terminal, en let op hoofdletters.

Door naar 6.1 Programma's installeren.