Числові змінні в Bash

Вступ до Bash Scripting

Alex Scriven

Data Scientist

Числа в інших мовах

Числа не вбудовані в оболонку, як у більшості REPL (консолей) на кшталт R і Python

У Python або R ви можете зробити так:

>>> 1 + 4
5

Воно поверне потрібний результат!

Вступ до Bash Scripting

Числа в оболонці

 

Рідної підтримки чисел немає:

(У терміналі)

1 + 4
bash: 1: command not found
Вступ до Bash Scripting

Знайомство з expr

 

expr — корисна утиліта (як cat чи grep)

Тепер це спрацює (у терміналі):

expr 1 + 4
5

Чудово!

Вступ до Bash Scripting

Обмеження expr

expr не вміє працювати з десятковими дробами:

(У терміналі)

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

Але не хвилюйтеся — є розв'язання.

Вступ до Bash Scripting

Знайомство з bc

bc (basic calculator) — корисна консольна програма.

Її можна запустити в терміналі та рахувати:

Використання програми BC в оболонці

Вступ до Bash Scripting

Передаємо числа до bc

 

Користуватися bc без відкриття калькулятора можна через конвеєр:

echo "5 + 7.5" | bc
12.5
Вступ до Bash Scripting

Аргумент scale у bc

У bc є аргумент scale — кількість знаків після коми.

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

Зверніть увагу на ; для відокремлення «рядків» у терміналі

3.333
Вступ до Bash Scripting

Числа в Bash-скриптах

Числові змінні можна задавати так само, як рядкові:

dog_name='Roger'
dog_age=6

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

Зверніть увагу: dog_age="6" спрацює, але це буде рядок!

My dog's name is Roger and he is 6 years old
Вступ до Bash Scripting

Нотація з подвійними дужками

Варіант нотації зі здвоєними дужками для числових виразів:

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

Зверніть увагу: цей метод використовує expr, не bc (без дробів!)

Вступ до Bash Scripting

Оболонка в оболонці: повторимо

Пам'ятаєте, як ми викликали підоболонку в попередньому уроці?

Це дуже корисно для числових змінних:

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
Вступ до Bash Scripting

Давайте потренуємось!

Вступ до Bash Scripting

Preparing Video For Download...