Linuxシェルスクリプトで学ぶ数学処理 – 第4回:四則演算から素数判定まで
今回は、数学と数値計算の視点からシェルスクリプトを学んでいきます。前回の記事ではやや複雑なスクリプト(簡易電卓)を紹介しましたが、読者にとっては少し理解しづらかったかもしれません。そこで今回は、内容を小さな単位に分割し、シェルスクリプトのもうひとつの実用的な側面を段階的に習得できるよう構成しました。
これまでの連載記事
この記事までに公開されているシェルスクリプト入門シリーズは以下の3本です。まだお読みでない方は、先に目を通しておくと理解がより深まります。
- Linuxシェルと基本のシェルスクリプトを理解する – 第1回
- シェルプログラミングが学べる5つのシェルスクリプト – 第2回
- Linux BASHスクリプティングの世界を旅する – 第3回
それでは、新しいスクリプトとともに学習を進めましょう。まずは数学系のスクリプトからスタートです。
スクリプト1:足し算(Addition)
「Addition.sh」というファイルを作成し、前回の記事で解説したとおりchmod 755で実行権限を付与してから実行してください。
#!/bin/bash echo "Enter the First Number: " read a echo "Enter the Second Number: " read b x=$(expr "$a" + "$b") echo $a + $b = $x
実行例
[admin@wsxdn.com ~]# vi Additions.sh [admin@wsxdn.com ~]# chmod 755 Additions.sh [admin@wsxdn.com ~]# ./Additions.sh Enter the First Number: 12 Enter the Second Number: 13 12 + 13 = 25
Addition.shのダウンロード
スクリプト2:引き算(Subtraction)
#!/bin/bash echo "Enter the First Number: " read a echo "Enter the Second Number: " read b x=$(($a - $b)) echo $a - $b = $x
ポイント:ここではexprコマンドを使わず、シェル自身の算術展開 $(()) によって計算させています。
実行例
[admin@wsxdn.com ~]# vi Substraction.sh [admin@wsxdn.com ~]# chmod 755 Substraction.sh [admin@wsxdn.com ~]# ./Substraction.sh Enter the First Number: 13 Enter the Second Number: 20 13 - 20 = -7
Substraction.shのダウンロード
スクリプト3:掛け算(Multiplication)
ここまで順調についてこられているなら、次は時系列どおり掛け算です。
#!/bin/bash echo "Enter the First Number: " read a echo "Enter the Second Number: " read b echo "$a * $b = $(expr $a \* $b)"
ポイント:今回は計算結果を変数に格納せず、出力文の中で直接計算しています。
実行例
[admin@wsxdn.com ~]# vi Multiplication.sh [admin@wsxdn.com ~]# chmod 755 Multiplication.sh [admin@wsxdn.com ~]# ./Multiplication.sh Enter the First Number: 11 Enter the Second Number: 11 11 * 11 = 121
Multiplication.shのダウンロード
スクリプト4:割り算(Division)
さて、次は割り算です。これも非常にシンプルなスクリプトなので、ぜひ自分で試してみてください。
#!/bin/bash echo "Enter the First Number: " read a echo "Enter the Second Number: " read b echo "$a / $b = $(expr $a / $b)"
補足:exprによる除算は整数除算となるため、小数点以下は切り捨てられる点に注意してください。
実行例
[admin@wsxdn.com ~]# vi Division.sh [admin@wsxdn.com ~]# chmod 755 Division.sh [admin@wsxdn.com ~]# ./Division.sh Enter the First Number: 12 Enter the Second Number: 3 12 / 3 = 4
Division.shのダウンロード
スクリプト5:掛け算の表(Table)
基本の四則演算の次は、任意の数の掛け算の表(九九の表)を出力するスクリプトを書いてみましょう。
#!/bin/bash echo "Enter The Number upto which you want to Print Table: " read n i=1 while [ $i -ne 10 ] do i=$(expr $i + 1) table=$(expr $i \* $n) echo $table done
実行例
[admin@wsxdn.com ~]# vi Table.sh [admin@wsxdn.com ~]# chmod 755 Table.sh [admin@wsxdn.com ~]# ./Table.sh Enter The Number upto which you want to Print Table: 29 58 87 116 145 174 203 232 261 290
Table.shのダウンロード
スクリプト6:偶数・奇数判定(EvenOdd)
子どもの頃、数字が偶数か奇数かを判定する計算をした経験は誰にでもあるはずです。それをスクリプトとして実装してみるのは良い練習になります。
#!/bin/bash echo "Enter The Number" read n num=$(expr $n % 2) if [ $num -eq 0 ] then echo "is a Even Number" else echo "is a Odd Number" fi
実行例
[admin@wsxdn.com ~]# vi EvenOdd.sh [admin@wsxdn.com ~]# chmod 755 EvenOdd.sh [admin@wsxdn.com ~]# ./EvenOdd.sh Enter The Number 12 is a Even Number
[admin@wsxdn.com ~]# ./EvenOdd.sh Enter The Number 11 is a Odd Number
EvenOdd.shのダウンロード
スクリプト7:階乗(Factorial)
次は階乗の計算です。
#!/bin/bash echo "Enter The Number" read a fact=1 while [ $a -ne 0 ] do fact=$(expr $fact \* $a) a=$(expr $a - 1) done echo $fact
実行例
[admin@wsxdn.com ~]# vi Factorial.sh [admin@wsxdn.com ~]# chmod 755 Factorial.sh [admin@wsxdn.com ~]# ./Factorial.sh Enter The Number 12 479001600
12×11×10×9×8×7×6×5×4×3×2×1 を手作業で計算するのは、上記のようなシンプルなスクリプトを書くよりもはるかに大変だと実感できたのではないでしょうか。99! のような巨大な階乗を求める必要がある場面を想像してみてください。そんなとき、このスクリプトはきっと強力な味方になります。
Factorial.shのダウンロード
スクリプト8:アームストロング数(Armstrong)
アームストロング数!そういえば何だったか忘れてしまった、という方のために簡単に復習しましょう。3桁のアームストロング数とは、「各桁の数字の3乗の総和がその数自身と等しい整数」のことです。たとえば 371 は、3³ + 7³ + 1³ = 27 + 343 + 1 = 371 となるため、アームストロング数です。
#!/bin/bash echo "Enter A Number" read n arm=0 temp=$n while [ $n -ne 0 ] do r=$(expr $n % 10) arm=$(expr $arm + $r \* $r \* $r) n=$(expr $n / 10) done echo $arm if [ $arm -eq $temp ] then echo "Armstrong" else echo "Not Armstrong" fi
実行例
[admin@wsxdn.com ~]# vi Armstrong.sh [admin@wsxdn.com ~]# chmod 755 Armstrong.sh [admin@wsxdn.com ~]# ./Armstrong.sh Enter A Number 371 371 Armstrong
[admin@wsxdn.com ~]# ./Armstrong.sh Enter A Number 123 36 Not Armstrong
Armstrong.shのダウンロード
スクリプト9:素数判定(Prime)
最後のスクリプトは、ある数が素数かどうかを判定するものです。
#!/bin/bash echo "Enter Any Number" read n i=1 c=1 while [ $i -le $n ] do i=$(expr $i + 1) r=$(expr $n % $i) if [ $r -eq 0 ] then c=$(expr $c + 1) fi done if [ $c -eq 2 ] then echo "Prime" else echo "Not Prime" fi
実行例
[admin@wsxdn.com ~]# vi Prime.sh [admin@wsxdn.com ~]# chmod 755 Prime.sh [admin@wsxdn.com ~]# ./Prime.sh "Enter Any Number" 12 "Not Prime"
Prime.shのダウンロード
今回は以上です。次回の記事では、シェルスクリプトによるその他の数学プログラムを取り上げる予定です。記事に関するご意見・ご感想は、ぜひコメント欄でお聞かせください。「いいね!」やシェアで拡散にご協力いただけるとありがたいです。FOSS関連のニュースや記事については、tecmint.comをぜひチェックしてください。それでは次回をお楽しみに!
-
Windows 10にBash(Linuxシェル)をインストールして使う方法【WSL完全ガイド】
Windows上でLinuxシェルをセットアップして使う方法を、Windows Subsystem for Linux(WSL)を使って解説します。 このチュートリアルは、2020年以降にリリースされた最新版のWindows 10を対象としています。古いバージョンのWindows 10でのWSLの使い方や、Windows 8/7/XP向けの別の方法については扱いません。サポートが終了したソフトウェアの使用は避けるべきだからです。どうしてもWindowsを使わなければならない場合は、必ずセキュリティ更新プログラムが提供されているバージョンを使用してください。 WSLは非常に優れたツールで、まるで
-
Windows 10にLinux Bashシェルをインストールする方法【WSL設定ガイド】
Bashシェルとは?Windows 10でLinuxが動く仕組み Bashシェルは、長年にわたりLinuxに搭載されてきたコマンドラインユーティリティです。そして現在、MicrosoftはこのBashシェルをWindows 10に直接組み込みました。これは仮想マシンでも、コンテナでも、Windows向けにコンパイルされたソフトウェアでもありません。実態は、Linuxソフトウェアを実行するための「Windows Subsystem for Linux(WSL)」というサブシステムであり、AndroidアプリをWindows上で動かすために開発されていた(後に中止された)Project Asto