Lから始まるLinux

2章62話
日時関連コマンド
2章63話 数学関連コマンド
もくじ
2章64話
ログイン関連コマンド
数学関連コマンド
若木 みどり
お兄ちゃん! 思いつく動作の数だけ コマンドがあるみたいだよ! 今回はどんなコマンドを 扱ってくれるんだろう?
若木 しげる
今回は数学に関する コマンドを紹介するよ!
seq コマンド
若木 しげる
seq 「数列(sequence)」を生成するよ 以下のように引数を1~3つ指定して使うんだ
seq 終了値
seq 開始値 終了値
seq 開始値 増分 終了値
若木 しげる
「開始値」「増分」指定されなかった場合1 となるんだ以下を実行してみよう
seq 5
若木 みどり
どんな結果になるのかな?
1
2
3
4
5
若木 みどり
1 から始まり、1 ずつ増えながら、5 で終わる」んだね!
factor コマンド
若木 しげる
factor素因数分解をするよ
factor [整数]...
若木 みどり
素因数分解って…どんな計算だったっけ?
若木 しげる
これは実行して見てみるのが早いと思うよ
factor 60
若木 みどり
どれどれ?
60: 2 2 3 5
若木 みどり
なるほど!「60 = 2 × 2 × 3 × 5」のような分解をしてくれるんだね!
若木 みどり
でも素因数を扱うことはめったにないような気がするなぁ
若木 しげる
素数はどうだろう?素数は素因数分解できないことを利用すればfactor から素数を調べられるんだ
若木 しげる
以下のコマンドは1 から 20 の間にある素数をseq のように列挙するよ!
factor {1..20} | awk -F':? +' 'NF == 2 { print $1 }'
若木 しげる
awkNF「フィールドの個数」だよNumber of Field の略なんだ
若木 みどり
へぇ…実行してみるね!
2
3
5
7
11
13
17
19
expr コマンド
若木 しげる
expr指定された表現を解釈してくれるんだ整数演算などで使われるよ
expr 表現
若木 しげる
以下を実行してみよう!
expr 1 + 1
若木 みどり
これは予想しやすいね!2 になるんでしょ?
2
若木 しげる
正解!expr には注意があるよ式で「アスタリスク(*)」「乗算」だけどシェルでは「ワイルドカード」なんだこのようなシェルで意味を持つ記号はクォートしてあげよう
若木 みどり
これって算術式展開 $(( ... )) の方が楽じゃないのかな?
若木 しげる
良い所に気が付いたね!算術式展開が登場するまではexpr が使われていたんだ今でも移植性を考慮したスクリプトなどで使われることがあるよ
若木 しげる
また 表現正しく評価できなければ失敗を返すんだこのことを利用して整数の判定ができるよ
TEXT=abc
expr "$TEXT" + 1 > /dev/null 2>&1 \
    && echo "$TEXT は整数です" \
    || echo "$TEXT は整数ではありません"
若木 みどり
なるほど!TEXT 変数の値が整数じゃなかったら演算できなくて失敗を返すんだね!
bc コマンド
若木 しげる
bc計算機なんだ小数演算などで使われるよ
bc [オプション]... [ファイル]...
若木 しげる
さっそく実行してみよう!
bc <<< '1.1 + 1.2'
若木 みどり
ええっと…答えは 2.3 かな?
2.3
若木 しげる
正解!
若木 みどり
これも算術式展開 $(( ... )) で…って聞くのは野暮かな?
若木 しげる
現在では小数の計算も算術式展開を使うことが多いよexpr の小数バージョンのような使われ方をするのも同じだね
若木 しげる
bc 自体がスクリプト言語でプログラムのように数式を書けるんだ複雑な計算式をテキストに記述してbc に計算させるという使い方もされるよ
若木 しげる
以下は bc半径2の円の面積を求めるよ
bc << \EOF
pi=3.14
r=2
r*r*pi
EOF
若木 みどり
bc の書き方を知らなくてもどんな計算を行っているか見ればだいたい伝わる内容だね!
12.56
まとめ
若木 みどり
今回は数学に関するコマンドseq, factor, expr, bcを学んだよ!
若木 しげる
用途はアイデア次第だよ!