Zmienne numeryczne w Bash

Wprowadzenie do skryptów Bash

Alex Scriven

Data Scientist

Liczby w innych językach

Liczby nie są wbudowane w powłokę tak jak w większości REPL-i (konsolach), np. R czy Python.

W Pythonie lub R można wpisać:

>>> 1 + 4
5

I otrzymamy oczekiwany wynik!

Wprowadzenie do skryptów Bash

Liczby w powłoce

 

Liczby nie są natywnie obsługiwane:

(W terminalu)

1 + 4
bash: 1: command not found
Wprowadzenie do skryptów Bash

Wprowadzenie do expr

 

expr to przydatny program narzędziowy (podobnie jak cat czy grep).

Teraz to zadziała (w terminalu):

expr 1 + 4
5

Działa!

Wprowadzenie do skryptów Bash

Ograniczenia expr

expr nie obsługuje natywnie liczb dziesiętnych:

(W terminalu)

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

Nie ma powodów do obaw! (Jest rozwiązanie)

Wprowadzenie do skryptów Bash

Wprowadzenie do bc

bc (basic calculator) to przydatny program wiersza poleceń.

Można go uruchomić w terminalu i wykonywać obliczenia:

Użycie programu BC w powłoce

Wprowadzenie do skryptów Bash

Przekazywanie liczb do bc

 

Można używać bc bez otwierania kalkulatora — wystarczy potokowanie:

echo "5 + 7.5" | bc
12.5
Wprowadzenie do skryptów Bash

Argument scale w bc

bc posiada argument scale określający liczbę miejsc dziesiętnych.

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

Znak ; służy do oddzielania „wierszy" w terminalu

3.333
Wprowadzenie do skryptów Bash

Liczby w skryptach Bash

Zmienne numeryczne deklaruje się tak samo jak zmienne tekstowe:

dog_name='Roger'
dog_age=6

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

Uwaga: dog_age="6" zadziała, ale zmieni wartość na ciąg znaków!

My dog's name is Roger and he is 6 years old
Wprowadzenie do skryptów Bash

Notacja z podwójnymi nawiasami

Alternatywna notacja dla zmiennych numerycznych z podwójnymi nawiasami:

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

Uwaga: ta metoda używa expr, nie bc (brak liczb dziesiętnych!)

Wprowadzenie do skryptów Bash

Powłoka w powłoce — przypomnienie

Czy pamiętasz wywoływanie powłoki z poprzedniej lekcji?

Bardzo przydatne przy zmiennych numerycznych:

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
Wprowadzenie do skryptów Bash

Czas na ćwiczenia!

Wprowadzenie do skryptów Bash

Preparing Video For Download...