Numerieke variabelen in Bash

Introductie tot Bash-scripting

Alex Scriven

Data Scientist

Getallen in andere talen

Getallen zijn niet native ingebouwd in de shell, anders dan in de meeste REPL's (console) zoals R en Python

In Python of R kun je dit doen:

>>> 1 + 4
5

Dat geeft direct het resultaat!

Introductie tot Bash-scripting

Getallen in de shell

 

Getallen worden niet native ondersteund:

(In de terminal)

1 + 4
bash: 1: command not found
Introductie tot Bash-scripting

Introductie van expr

 

expr is een handig hulpprogramma (net als cat of grep)

Dit werkt nu wel (in de terminal):

expr 1 + 4
5

Mooi!

Introductie tot Bash-scripting

Beperkingen van expr

expr kan geen decimalen aan:

(In terminal)

expr 1 + 2.5
expr: not a decimal number: '2.5'

Geen zorgen! (Er is een oplossing)

Introductie tot Bash-scripting

Introductie van bc

bc (basic calculator) is een handig command-lineprogramma.

Je kunt het in de terminal starten en berekeningen doen:

BC gebruiken in de shell

Introductie tot Bash-scripting

Getallen naar bc sturen

 

bc gebruiken zonder de rekenmachine te openen kan via piping:

echo "5 + 7.5" | bc
12.5
Introductie tot Bash-scripting

bc scale-argument

bc heeft ook een scale-argument voor het aantal decimalen.

echo "10 / 3" | bc
3
echo "scale=3; 10 / 3" | bc

Let op het gebruik van ; om 'regels' in de terminal te scheiden

3.333
Introductie tot Bash-scripting

Getallen in Bash-scripts

We kunnen numerieke variabelen net als stringvariabelen toewijzen:

dog_name='Roger'
dog_age=6

echo "My dog's name is $dog_name and he is $dog_age years old"

Let op: dog_age="6" werkt, maar maakt het een string!

My dog's name is Roger and he is 6 years old
Introductie tot Bash-scripting

Dubbele-haakjesnotatie

Een variant op enkelvoudige haakjesnotatie voor numerieke variabelen:

expr 5 + 7
echo $((5 + 7))
12
12

Let op: deze methode gebruikt expr, niet bc (geen decimalen!)

Introductie tot Bash-scripting

Shell-in-shell herzien

Weet je nog hoe we in de vorige les de shell aanriepen?

Erg handig voor numerieke variabelen:

model1=87.65
model2=89.20

echo "The total score is $(echo "$model1 + $model2" | bc)"
echo "The average score is $(echo "($model1 + $model2) / 2" | bc)"
The total score is 176.85
The average score is 88
Introductie tot Bash-scripting

Laten we oefenen!

Introductie tot Bash-scripting

Preparing Video For Download...