はじめに
プログラミングの基本問題としてよく知られているFizzBuzzをbashスクリプトで実装し、さらにコマンドとして使えるようにする方法を紹介します。
ブラウザ上でLinux環境を使えるエンベーダーを使用しました。
シナリオによってはvimが使えないシナリオもあるので、vimが使えるシナリオを使いました。
Linux基礎コース Part1 テキストエディタ「vim」入門
FizzBuzzとは
1から指定した数までカウントしていき、以下のルールで出力を変更するプログラムです:
- 3の倍数のとき → "Fizz"
- 5の倍数のとき → "Buzz"
- 15の倍数のとき → "FizzBuzz"
- それ以外 → その数字をそのまま出力
コマンド化する手順
作成したスクリプトをコマンドとして使えるようにします:
1. binディレクトリを作成
mkdir bin
2. fizzbuzz実行ファイルを作成
vim ~/bin/fizzbuzz
以下の内容でスクリプトを作成します:
引数で数値を指定すればその数までFizzBuzzを行い、何も指定しなければデフォルトの数までFizzBuzzをするように作成します。
#!/bin/bash
# 引数が無い場合は20をデフォルト値として使用
count=${1:-20}
# 1からcountまでループ
for ((i=1; i<=$count; i++)); do
if [ $((i%15)) -eq 0 ]; then
echo "FizzBuzz"
elif [ $((i%3)) -eq 0 ]; then
echo "Fizz"
elif [ $((i%5)) -eq 0 ]; then
echo "Buzz"
else
echo $i
fi
done
コードの解説
-
シバン(
#!/bin/bash
)- スクリプトを実行する際に使用するインタプリタを指定
- この場合はbashを使用することを示しています
-
引数処理(
count=${1:-20}
)-
$1
: スクリプトの1番目の引数 -
:-
: デフォルト値演算子(引数が無い場合に使用する値を指定) -
20
: デフォルト値
-
-
forループ(
for ((i=1; i<=$count; i++)); do
)- C言語風の構文でループを記述
- 1から指定された数(count)まで繰り返し
-
条件分岐
-
$((i%15))
: 15で割った余りを計算 -
-eq 0
:-eq
はequal(イコール)の略。余りが0かどうかを判定 - 同様に3の倍数、5の倍数をチェック
-
bashで数値計算を行う際には $(( )) を使用します。これにより、C言語風の演算が可能になります。
$((i%15)) # iを15で割った余りを計算
3. 実行権限を付与
chmod +x ~/bin/fizzbuzz
4. PATHを通す
# ~/.bashrcに以下を追記
export PATH=$PATH:~/bin
# 設定を反映
source ~/.bashrc
これで fizzbuzz
コマンドとして使用できるようになります。
使い方
# デフォルト(20回)で実行
fizzbuzz
# 出力結果
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
引数を指定するとその数まで実行
envader@172-19-2-2:~$ fizzbuzz 30
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
無事にFizzBuzzが実行できました。
おわりに
bashスクリプトでFizzBuzzを実装し、コマンド化することで、スクリプトの知識やコマンド化するまでのプロセスを理解するのに良いと思います。
この例を元に、他にも面白いコマンドを作って遊んでみてください。