0
0

【Linux】九九表をシェルスクリプトで作成

Last updated at Posted at 2024-01-21

はじめに

オープン系COBOLに欠かせないのがLinuxの知識であったり、シェルの知識であったりします。
今回はシェルスクリプトを使って、A×B=Cの形で九九表を表示させていたいと思います。

早速bashで作ってみます。

pro2008A.sh
#!/bin/bash
#九九表を表示する。
sum=0
for ((i = 1; i <= 9; i++))
do
  for ((j = 1; j <= 9; j++))
  do
    ((sum = i * j))
     printf '%d×%d=%2d' "$i" "$j" "$sum"
     echo -n ' '
  done
  if ((j = 9))
    then
      echo # 改行する
    else
      continue
  fi
done

bashでは算術式を使ってforでループさせて、計算した結果をprintfを使って形を整えます。
'%d×%d=%2d'の表記について九九なので%d×%dの部分は1桁でいいでしょう。
=%2dも2桁確保することによって1桁でも列で見た時に形が整うことが出来ます。

最後、改行なしで1文字空文字を入れて整形するためecho -n ' 'を用いています。
ここでecho -e ' \c'にしても同様な挙動を示します。

jのループを1回抜けたらA×9=Cの段階まで行ったら改行します。
それによって横に1の段、2の段と段を行で表示させることが出来ます。

pro2008A.sh実行結果
$ ./pro2008A.sh
1×1= 1 1×2= 2 1×3= 3 1×4= 4 1×5= 5 1×6= 6 1×7= 7 1×8= 8 1×9= 9
2×1= 2 2×2= 4 2×3= 6 2×4= 8 2×5=10 2×6=12 2×7=14 2×8=16 2×9=18
3×1= 3 3×2= 6 3×3= 9 3×4=12 3×5=15 3×6=18 3×7=21 3×8=24 3×9=27
4×1= 4 4×2= 8 4×3=12 4×4=16 4×5=20 4×6=24 4×7=28 4×8=32 4×9=36
5×1= 5 5×2=10 5×3=15 5×4=20 5×5=25 5×6=30 5×7=35 5×8=40 5×9=45
6×1= 6 6×2=12 6×3=18 6×4=24 6×5=30 6×6=36 6×7=42 6×8=48 6×9=54
7×1= 7 7×2=14 7×3=21 7×4=28 7×5=35 7×6=42 7×7=49 7×8=56 7×9=63
8×1= 8 8×2=16 8×3=24 8×4=32 8×5=40 8×6=48 8×7=56 8×8=64 8×9=72
9×1= 9 9×2=18 9×3=27 9×4=36 9×5=45 9×6=54 9×7=63 9×8=72 9×9=81

実行結果見ると列と行が乱れないで表示されたことがお分かりいただけたと思います。

shでシェルスクリプトを作ったらこうなります。

pro2008A.sh
#!/bin/sh
#九九表を表示する。
sum=0
for i in $(seq 1 9)
do
  for j in $(seq 1 9)
  do
    sum=$(expr "$i" \* "$j")
    printf '%d×%d=%2d' "$i" "$j" "$sum"
    echo -n ' '
  done
  if [ "$j" = 9 ]
    then
      echo # 改行する
    else
      continue
  fi
done

まずfor文はいくつか別解的書き方がいくつかあって

for i in 1 2 3 4 5 6 7 8 9

の様に書く事ができますし、

バッククォーテーションとseqコマンドを使って

for i in `seq 1 9`

の様に書く事が出来ます。

for i in $(seq 1 9)

が一番スマートな書き方に思えたのでこちらを採用しました.

また、exprコマンドで掛け算する時は*の前に\をつけるのを忘れないようにしましょう。
shなので算術式は使えずexprコマンドで計算する形になります。

pro2008B.sh実行結果
$ ./pro2008B.sh
1×1= 1 1×2= 2 1×3= 3 1×4= 4 1×5= 5 1×6= 6 1×7= 7 1×8= 8 1×9= 9
2×1= 2 2×2= 4 2×3= 6 2×4= 8 2×5=10 2×6=12 2×7=14 2×8=16 2×9=18
3×1= 3 3×2= 6 3×3= 9 3×4=12 3×5=15 3×6=18 3×7=21 3×8=24 3×9=27
4×1= 4 4×2= 8 4×3=12 4×4=16 4×5=20 4×6=24 4×7=28 4×8=32 4×9=36
5×1= 5 5×2=10 5×3=15 5×4=20 5×5=25 5×6=30 5×7=35 5×8=40 5×9=45
6×1= 6 6×2=12 6×3=18 6×4=24 6×5=30 6×6=36 6×7=42 6×8=48 6×9=54
7×1= 7 7×2=14 7×3=21 7×4=28 7×5=35 7×6=42 7×7=49 7×8=56 7×9=63
8×1= 8 8×2=16 8×3=24 8×4=32 8×5=40 8×6=48 8×7=56 8×8=64 8×9=72
9×1= 9 9×2=18 9×3=27 9×4=36 9×5=45 9×6=54 9×7=63 9×8=72 9×9=81

shでも実行結果が正しく出たのが確認出来ました。

最後に

今回、九九表を行うスクリプトを紹介しました。

最後までご覧いただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0