このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:シェルスクリプト:じゃんけんゲーム

シェルスクリプト:じゃんけんゲーム
シェルスクリプトは、システム管理だけでなく、ちょっとしたゲームやツールを作成する際にも非常に便利です。ここでは、シェルスクリプトを使って「じゃんけんゲーム」を作成し、その作成から実行までの手順と解説を行います。

じゃんけんゲームの概要
- 目的:ユーザーとコンピューターがじゃんけんを行い、勝敗を決めます。
- ルール:
・ユーザーは「グー」「チョキ」「パー」のいずれかを選択します。
・コンピューターもランダムに「グー」「チョキ」「パー」を選択します。
スクリプトの作成と実行手順
ステップ1:スクリプトファイルの作成
ターミナルで以下のコマンドを実行し、新しいスクリプトファイル janken.sh
を作成します。
user01@ubuntu:~$ nano janken.sh
ステップ2:スクリプトの内容を記述
エディタが開いたら、以下の内容をコピーして貼り付けます。
#!/bin/bash
# 選択肢の配列
choices=("グー" "チョキ" "パー")
echo "じゃんけんゲームへようこそ!"
while true; do
echo "あなたの手を選んでください:"
echo "0) グー"
echo "1) チョキ"
echo "2) パー"
read -p "番号を入力してください(終了するには 'exit' と入力): " user_input
# ゲームの終了判定
if [ "$user_input" == "exit" ]; then
echo "ゲームを終了します。"
break
fi
# 入力のバリデーション
if ! [[ "$user_input" =~ ^[0-2]$ ]]; then
echo "エラー: 0から2の数字を入力してください。"
continue
fi
# ユーザーの手
user_choice=${choices[$user_input]}
echo "あなたの手:$user_choice"
# コンピューターの手をランダムに選択
computer_input=$(( RANDOM % 3 ))
computer_choice=${choices[$computer_input]}
echo "コンピューターの手:$computer_choice"
# 勝敗の判定
if [ "$user_input" -eq "$computer_input" ]; then
echo "結果:あいこです。"
elif [ "$user_input" -eq 0 ] && [ "$computer_input" -eq 1 ] ||
[ "$user_input" -eq 1 ] && [ "$computer_input" -eq 2 ] ||
[ "$user_input" -eq 2 ] && [ "$computer_input" -eq 0 ]; then
echo "結果:あなたの勝ちです!"
else
echo "結果:あなたの負けです。"
fi
echo
done
スクリプトの各部分の解説
実際のスクリプト janken.sh
を見ながら、各部分の解説を行います。
シェバン行
スクリプトが Bash シェルで実行されることを指定します。
#!/bin/bash
選択肢の配列
ユーザーとコンピューターが選択できる手を配列に格納しています。
choices=("グー" "チョキ" "パー")
ゲーム開始のメッセージ
ゲームの開始を知らせます。
echo "じゃんけんゲームへようこそ!"
無限ループの開始
ユーザーが exit
を入力するまでゲームを繰り返します。
while true; do
# ゲームの処理
done
ユーザーからの入力受付
ユーザーに手を選んでもらいます。
echo "あなたの手を選んでください:"
echo "0) グー"
echo "1) チョキ"
echo "2) パー"
read -p "番号を入力してください(終了するには 'exit' と入力): " user_input
ゲームの終了判定
ユーザーが exit
を入力した場合、ループを抜けてゲームを終了します。
if [ "$user_input" == "exit" ]; then
echo "ゲームを終了します。"
break
fi
入力のバリデーション
ユーザーの入力が 0
、1
、2
のいずれかであるかをチェックします。
if ! [[ "$user_input" =~ ^[0-2]$ ]]; then
echo "エラー: 0から2の数字を入力してください。"
continue
fi
ユーザーの手の決定
入力に対応する手を選択します。
user_choice=${choices[$user_input]}
echo "あなたの手:$user_choice"
コンピューターの手をランダムに選択
$RANDOM
変数を使用して、0から2の整数をランダムに生成し、コンピューターの手を決定します。
computer_input=$(( RANDOM % 3 ))
computer_choice=${choices[$computer_input]}
echo "コンピューターの手:$computer_choice"
勝敗の判定
- ユーザーの手とコンピューターの手を比較し、勝敗を判定します。
- 勝利条件
・ユーザーがグー (0)
でコンピューターがチョキ (1)
の場合
・ユーザーがチョキ (1)
でコンピューターがパー (2)
の場合
・ユーザーがパー (2)
でコンピューターがグー (0)
の場合
if [ "$user_input" -eq "$computer_input" ]; then
echo "結果:あいこです。"
elif [ "$user_input" -eq 0 ] && [ "$computer_input" -eq 1 ] ||
[ "$user_input" -eq 1 ] && [ "$computer_input" -eq 2 ] ||
[ "$user_input" -eq 2 ] && [ "$computer_input" -eq 0 ]; then
echo "結果:あなたの勝ちです!"
else
echo "結果:あなたの負けです。"
fi
結果の表示
勝敗の結果を表示します。
ステップ3:スクリプトに実行権限を付与
スクリプトを保存してエディタを閉じたら、実行権限を付与します。
user01@ubuntu:~$ chmod +x janken.sh
ステップ4:スクリプトの実行
スクリプトを実行して、じゃんけんゲームを開始します。
user01@ubuntu:~$ ./janken.sh
実行例
じゃんけんゲームへようこそ!
あなたの手を選んでください:
0) グー
1) チョキ
2) パー
番号を入力してください(終了するには 'exit' と入力): 0
あなたの手:グー
コンピューターの手:チョキ
結果:あなたの勝ちです!
あなたの手を選んでください:
0) グー
1) チョキ
2) パー
番号を入力してください(終了するには 'exit' と入力): 2
あなたの手:パー
コンピューターの手:グー
結果:あなたの負けです。
あなたの手を選んでください:
0) グー
1) チョキ
2) パー
番号を入力してください(終了するには 'exit' と入力): exit
ゲームを終了します。
解説
- ユーザーは
0
、1
、2
の数字を入力して手を選択します。 - コンピューターはランダムに手を選択します。
- 勝敗が判定され、結果が表示されます。
exit
と入力すると、ゲームが終了します。
ここで作成したファイルの削除
ゲームのテストが終わったら、作成した janken.sh
ファイルを削除します。
user01@ubuntu:~$ rm janken.sh
まとめ
- シェルスクリプトの活用:シェルスクリプトを使って、簡単なじゃんけんゲームを作成しました。
- 配列の利用:選択肢を配列に格納し、ユーザーやコンピューターの手を簡潔に管理しました。
- 入力のバリデーション:ユーザーの入力を正規表現でチェックし、適切なエラーメッセージを表示しました。
- ランダムな数の生成:
$RANDOM
変数を使用して、コンピューターの手をランダムに選択しました。 - 条件分岐と論理演算子:
if
文と論理演算子を使って、勝敗の判定を行いました。
このように、シェルスクリプトを使えば、簡単なゲームやツールを手軽に作成することができます。今回のじゃんけんゲームをベースに、機能を拡張したり、別のゲームを作成してみてください。