1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BashでFizzBuzzコマンドを作ってみよう

Posted at

はじめに

プログラミングの基本問題としてよく知られている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

コードの解説

  1. シバン(#!/bin/bash

    • スクリプトを実行する際に使用するインタプリタを指定
    • この場合はbashを使用することを示しています
  2. 引数処理(count=${1:-20}

    • $1: スクリプトの1番目の引数
    • :-: デフォルト値演算子(引数が無い場合に使用する値を指定)
    • 20: デフォルト値
  3. forループ(for ((i=1; i<=$count; i++)); do

    • C言語風の構文でループを記述
    • 1から指定された数(count)まで繰り返し
  4. 条件分岐

    • $((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を実装し、コマンド化することで、スクリプトの知識やコマンド化するまでのプロセスを理解するのに良いと思います。
この例を元に、他にも面白いコマンドを作って遊んでみてください。

1
0
2

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?