As variáveis do shell são strings por padrão. Alguns shells suportam outros tipos de variáveis, mas você precisa informar ao shell.
Em qualquer shell no estilo POSIX ( sh
exceto em antigos sistemas Unix, dash, bash, ksh, zsh, etc.), você pode usar expansão aritmética para dizer ao shell para realizar a aritmética ao analisar a atribuição de variáveis.
t=20
s=$((t+30))
echo "$s"
(As aspas duplas não são necessárias aqui, mas eles são um bom hábito para pegar .)
Também é possível armazenar o texto da expressão para avaliar e realizar a aritmética ao imprimi-lo.
t=20
s=$((t+30))
echo "expression: $s; evaluated: $(($s))"
Mas tenha cuidado ao usar substituições explícitas de variáveis dentro de expressões aritméticas: elas são substituídas como texto, não como subexpressões aritméticas, então a precedência do operador pode parecer estranha.
echo "$(($s*2))" # equivalent to $((t+30*2)), so prints 80, not 100
No bash, ksh ou zsh, você pode usar let
ou ((…))
para realizar a aritmética.
t=20
let s=t+30
echo "$s"
ou
((t = 20))
((s = t + 30))
echo "$s"
ou suas variações.
Outra possibilidade no bash, ksh ou zsh é usar o typeset
builtin para declarar a variável como um inteiro. Então, toda atribuição a ele realiza avaliação aritmética.
typeset -i s t
t=20
s=t+30
echo "$s"