Paepoi

Paepoi » ShellScript Tips » ShellScript Tips | 数値計算

ShellScript Tips | 数値計算

# 最終更新日 2019.12.01

数値計算
シェルスクリプトは基本的に文字列しか扱えないので数値として認識させる必要があります。
色々な方法がありますが以下に例を、ちなみに数学同様に掛け算割り算が優先されます。
#!/bin/sh

# bash3,4 zsh dash で動かしてみる

# $((計算式))
# 結果を戻す関数のように使える、半角スペースやエスケープは不要
# zsh や dash でも利用可能、一番使われている
echo $((3+5*8))
#=> 43

# $[計算式]
# bash, zsh で有効、dash では文字列扱い
echo $[3+5*8]

# expr 計算式
# 結果を標準出力に書き出すコマンド、変数に代入する場合はバッククォートを使う
# 演算子と整数の区切りに半角スペースが必要、括弧と掛け算はエスケープが必要
expr 3 + 5 \* 8

# let 変数=計算式
# bash の組み込みコマンド、当然 bash のみ有効
let aa=3+5*8
echo $aa

# @ 変数 = 計算式
# tcsh で使う(おまけ)すべての区切りに半角スペースが必要。
#@ bb = 3 + 5 * 8
#echo $bb

$((計算式)) がほぼスタンダードとして使われています。
また $ を付けなければ計算のみを行ないます、変数宣言も可能です。
(( num = 30 + 2 ))
echo $num
#=> 32

インクリメント
#!/bin/sh

# デクリメントは --

count=0
while (( count < 1000 )); do
    (( count++ ))
done
echo $count
#=> 1000

16進数, 8進数、2進数
#!/bin/sh

# 16進数の計算は 0x** でもいい
echo $(( 0xff * 2 ))
#=> 510

# 8進数の計算 0**
# zsh は 10 進数と解釈
echo $(( 010 * 2 ))
#=> 16

# n進数は 'n#数値' と表現できる
# dash では利用できません

# 16進数
echo $(( 16#fa ))
#=> 250

# 8進数
echo $(( 8#11 * 2 ))
#=> 18

# 2進数
echo $(( 2#1100 ))
#=> 12

bc コマンド
bc という小数点を扱った計算もできるコマンドもあります。
expr 等と違いファイルやパイプで引き渡された計算式を処理します。
オプション無しで起動すれば計算式の次行に結果を出力する簡単な計算機になります。
$ echo "3.5+2.2" | bc
5.7

# 割り算で小数点以下が必要な場合は -l オプションで起動する
$ bc
3.5+2.2
5.7

Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.