bashでじゃんけんゲームをするシェルスクリプトです。
コンピューター側は乱数を使って、0~2の整数を取得します。
bashの乱数に関する説明は、以下の記事を参照してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#!/bin/bash ### 配列定義 arr=( "グー" "チョキ" "パー" ) ### ユーザー入力 echo ">>> 選択してください" echo ">>> 0:グー 1:チョキ 2:パー" echo -n ">>> " read val ### 入力チェック if [[ ${#val} == 1 && $(echo $val | grep [0-2]) ]] then ### 配列から要素を取得 play_act=${arr[$val]} else echo "!! 0 か 1 か 2 を入力してください !!" exit 1 fi ### 0~2の乱数を取得 while true do num=$(cat /dev/urandom | tr -dc [:digit:] | fold -w1 | head -1) if (( 0 <= num && num <= 2 )) then break fi done ### 配列から要素を取得 comp_act=${arr[$num]} ### 判定 if [[ "$play_act" == "$comp_act" ]] then result="draw" elif [[ "$play_act" == "グー" && "$comp_act" == "チョキ" ]] then result="play" elif [[ "$play_act" == "チョキ" && "$comp_act" == "パー" ]] then result="play" elif [[ "$play_act" == "パー" && "$comp_act" == "グー" ]] then result="play" elif [[ "$play_act" == "グー" && "$comp_act" == "パー" ]] then result="comp" elif [[ "$play_act" == "チョキ" && "$comp_act" == "グー" ]] then result="comp" elif [[ "$play_act" == "パー" && "$comp_act" == "チョキ" ]] then result="comp" fi ### 表示 echo "++ 自分 => [$play_act]" echo "++ 相手 => [$comp_act]" ### 判定 case "$result" in draw) echo "++ 引き分け ++" ;; play) echo "++ 自分の勝利 ++" ;; comp) echo "++ 相手の勝利 ++" ;; esac |
実行例
$ ./game1.sh
>>> 選択してください
>>> 0:グー 1:チョキ 2:パー
>>> 0
++ 自分 => [グー]
++ 相手 => [チョキ]
++ 自分の勝利 ++