Bashスクリプトを仕事で欠かないといけないので、学習がてらBashスクリプトで九九表を作成してみました。
全体のコード
#!/bin/bash
function munipulate(){
for ((stepNumber=1 ; stepNumber<10 ; stepNumber++)) do
printf $stepNumber"の段|"
for ((i=1 ; i<10 ; i++)) do
result=$((stepNumber*i));
if [ ${#result} = 1 ]; then
printf " $result"
else
printf " $result"
fi
done
printf "\n"
done
}
munipulate
コードの解説をします
まず最初の
#!/bin/bash
で、bashスクリプトのファイルを実行させるために必要なものを宣言させます。要はおまじないですね。
その次に、掛け算をするために必要なメソッドを宣言します。
function munipulate(){
一番最初の外側のfor文で、
for ((stepNumber=1 ; stepNumber<10 ; stepNumber++)) do
printf $stepNumber"の段|"
を生成させます。
これをすることで、九九表に必要な~の段の部分を出力します。
そして、二つ目のfor文で掛け算の答えの部分を生成させます。
for ((i=1 ; i<10 ; i++)) do
result=$((stepNumber*i));
どうやっているかというと、外側のfor文の数字と今内側にあるfor文の変数をかけます。
そして、内側のfor文が抜けるタイミング(for文のループが一周したタイミング)で改行を入れることで、
1の段| 1 2 3 4 5 6 7 8 92の段| 2 4 6 8 10 12 14 16 183の段| 3 6 9 12 15 18 21 24 274の段| 4 8 12 16 20 24 28 32 365の段| 5 10 15 20 25 30 35 40 456の段| 6 12 18 24 30 36 42 48 547の段| 7 14 21 28 35 42 49 56 638の段| 8 16 24 32 40 48 56 64 729の段| 9 18 27 36 45 54 63 72 81
と横一列に出力されるのを防ぐことができます。
よし、これで完成しただろうと思っていました。
完成コードは以下です。
#!/bin/bash
function munipulate(){
for ((stepNumber=1 ; stepNumber<10 ; stepNumber++)) do
printf $stepNumber"の段|"
for ((i=1 ; i<10 ; i++)) do
result=$((stepNumber*i));
printf "$result"
done
printf "\n"
done
}
munipulate
ただ、これだとものすごく出力が汚いんですよね。
1の段|123456789
2の段|24681012141618
3の段|369121518212427
4の段|4812162024283236
5の段|51015202530354045
6の段|61218243036424854
7の段|71421283542495663
8の段|81624324048566472
9の段|91827364554637281
これだと18なのか1と8なのかわからないですよね。
なので、二つ目のfor文の中に条件分岐があります。
if [ ${#result} = 1 ]; then
printf " $result"
else
printf " $result"
fi
まず、${#result}で、掛け算の結果の答えが一桁なのか二桁なのか判定します。
そして、もし一桁だった場合は左側に半角スペースを2ついれて、2桁だった場合は半角スペースを一つだけ挿入させることで表を整形しています。
出力するとこんな感じになります。
1の段| 1 2 3 4 5 6 7 8 9
2の段| 2 4 6 8 10 12 14 16 18
3の段| 3 6 9 12 15 18 21 24 27
4の段| 4 8 12 16 20 24 28 32 36
5の段| 5 10 15 20 25 30 35 40 45
6の段| 6 12 18 24 30 36 42 48 54
7の段| 7 14 21 28 35 42 49 56 63
8の段| 8 16 24 32 40 48 56 64 72
9の段| 9 18 27 36 45 54 63 72 81
よし!!完成しました!!!!!
↧