Введение в Bash-скриптинг
Alex Scriven
Data Scientist
Числа не поддерживаются оболочкой так же нативно, как в большинстве REPL (консолей), например R или Python
В Python или R можно написать:
>>> 1 + 4
5
И получить ожидаемый результат!
Числа не поддерживаются нативно:
(В терминале)
1 + 4
bash: 1: command not found
expr — удобная утилита (как cat или grep)
Теперь это сработает (в терминале):
expr 1 + 4
5
Отлично!
expr не поддерживает десятичные числа нативно:
(В терминале)
expr 1 + 2.5
expr: not a decimal number: '2.5'
Но не беспокойтесь! (Решение есть)
bc (базовый калькулятор) — полезная программа командной строки.
Её можно запустить в терминале и выполнять вычисления:

Можно использовать bc, не открывая калькулятор — с помощью конвейера:
echo "5 + 7.5" | bc
12.5
У bc есть аргумент scale для задания числа знаков после запятой.
echo "10 / 3" | bc
3
echo "scale=3; 10 / 3" | bc
Обратите внимание: ; разделяет «строки» в терминале
3.333
Числовые переменные присваиваются так же, как строковые:
dog_name='Roger' dog_age=6echo "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
Альтернативная запись с двойными скобками для числовых переменных:
expr 5 + 7
echo $((5 + 7))
12
12
Учтите: этот метод использует expr, а не bc (без десятичных чисел!)
Помните, как мы обращались к оболочке в предыдущем уроке?
Это очень удобно для числовых переменных:
model1=87.65 model2=89.20echo "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-скриптинг