Variáveis numéricas no Bash

Introdução ao Bash Scripting

Alex Scriven

Data Scientist

Números em outras linguagens

Números não são nativos no shell como na maioria dos REPLs (console), como R e Python

Em Python ou R você pode fazer:

>>> 1 + 4
5

Isso vai retornar o que você quer!

Introdução ao Bash Scripting

Números no shell

 

Números não são suportados nativamente:

(No terminal)

1 + 4
bash: 1: command not found
Introdução ao Bash Scripting

Apresentando o expr

 

expr é um utilitário útil (como cat ou grep)

Isso agora funciona (no terminal):

expr 1 + 4
5

Muito bom!

Introdução ao Bash Scripting

Limitações do expr

expr não lida nativamente com casas decimais:

(No terminal)

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

Mas não se preocupe! (Há solução)

Introdução ao Bash Scripting

Apresentando o bc

bc (basic calculator) é um programa de linha de comando útil.

Você pode abri-lo no terminal e fazer cálculos:

Usando o programa BC no shell

Introdução ao Bash Scripting

Enviando números para o bc

 

Usar o bc sem abrir a calculadora é possível com pipe:

echo "5 + 7.5" | bc
12.5
Introdução ao Bash Scripting

Argumento scale do bc

bc também tem o argumento scale para definir casas decimais.

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

Note o uso de ; para separar "linhas" no terminal

3.333
Introdução ao Bash Scripting

Números em scripts Bash

Podemos atribuir variáveis numéricas como variáveis de string:

dog_name='Roger'
dog_age=6

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

Atenção: dog_age="6" funciona, mas vira string!

My dog's name is Roger and he is 6 years old
Introdução ao Bash Scripting

Notação de colchetes duplos

Uma variação da notação de variável com colchetes simples para números:

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

Atenção: este método usa expr, não bc (sem decimais!)

Introdução ao Bash Scripting

Shell dentro do shell (revisão)

Lembra como chamamos o shell na lição anterior?

Muito útil para variáveis numéricas:

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
Introdução ao Bash Scripting

Vamos praticar!

Introdução ao Bash Scripting

Preparing Video For Download...