#!/bin/bash gn=0 #誤入力回数 ec=`expr $RANDOM % 5 + 3` #機嫌が悪くなるまでの誤入力回数 ee=`expr $ec + 2 + $RANDOM % 5` #堪忍袋の緒が切れるまでの誤入力回数 well="Well" #機嫌が良いときの呼びかけ文句 ap="sorry" #機嫌を直す魔法の言葉 ####↓ご機嫌斜めのときの処理↓#### printf "" >> quiz3.txt read exc quiz3.txt #quiz3.txtを整地 echo "Type your first answer!" #入力を促す anst=0 #回答回数カウンターをリセット while : #以下を繰り返す do ####↓機嫌が悪くなったときの処理↓#### if [ $gn -eq $ee ] then echo "No." echo "Dump it." echo "Don't treat me like a fool just because I'm a script!!!!" echo "I feel like shit!!!!" echo "I'll NOT be back." echo "excrement" > quiz3.txt exit elif [ $gn -ge $ec ] then echo "Do it right!" echo "Do it right!" >> quiz3.txt well="Git" fi ####↑機嫌が悪くなったときの処理↑#### read ans #入力された数字をansに読み込む echo $ans >> quiz3.txt #入力された数字を出力 an[0]=`echo $ans | cut -c1` #入力された数字の1桁目を配列"an"の0番地に読み込む an[1]=`echo $ans | cut -c2` #入力された数字の2桁目を配列"an"の1番地に読み込む an[2]=`echo $ans | cut -c3` #入力された数字の3桁目を配列"an"の2番地に読み込む an[3]=`echo $ans | cut -c4` #入力された数字の4桁目を配列"an"の3番地に読み込む zw=0 #全ての桁が数字であるかのチェック用変数:zw for xx in `seq 0 3` #↓各桁で調べる do for yy in `seq 0 9` do if [ "${an[$xx]}" = "$yy" ] #数字のとき then zw=`expr $zw + 1` #zwに1を足す fi done done #↑全ての桁が数字ならzwは4になる if [ $zw -eq 4 ] #全ての桁が数字のとき(zwが4のとき) then zw=0 #とりあえずzwを0にしておいて if [ $ans -ge 1000 -a $ans -le 9999 ] #入力された値が正しい範囲にあるとき then zw=4 #zwを4に戻す fi fi if [ $zw -ne 4 ] #入力された値が変なもののとき(zwが4以外のとき) then echo "That's a no-go." #文句を言う echo "That's a no-go." >> quiz3.txt #文句を出力 echo "$well, type your answer again." #再入力を催促 echo "$well, type your answer again." >> quiz3.txt #再入力催促を出力 gn=`expr $gn + 1` #誤入力回数を1増やす continue #入力待ちに戻る fi zy=0 #0を含んでいるかのチェック用変数:zy zz=0 #同じ数字を含んでいるかのチェック用変数:zz for xx in `seq 0 3` #↓各桁で調べる do for yy in `seq 0 3` do #0を除く同じ数字を含んでいるとき if [ ${an[$xx]} -eq ${an[$yy]} -a $xx -ne $yy -a ${an[$xx]} -ne 0 ] then zz=1 #zzを1にする fi done if [ ${an[$xx]} -eq 0 ] #0を含んでいるとき then zy=1 #zyを1にする fi done if [ $zy -eq 1 ] #0を含んでいるとき(zyが1のとき) then echo "Oh! Do not type 0.." #文句を言う echo "Oh! Do not type 0.." >> quiz3.txt #文句を出力 fi if [ $zz -eq 1 ] #同じ数字を含んでいるとき(zzが1のとき) then echo "Ah! Do not type duplicate number.." #文句を言う echo "Ah! Do not type duplicate number.." >> quiz3.txt #文句を出力 fi if [ $zy -eq 1 -o $zz -eq 1 ] #0か同じ数字を含んでいるとき then echo "Well, type your answer again." #再入力を催促 echo "Well, type your answer again." >> quiz3.txt #再入力催促を出力 gn=`expr $gn + 1` #誤入力回数を1増やす continue #入力待ちに戻る fi anst=`expr $anst + 1` #回答回数カウンターを1上げる hit=0 #hitの回数をリセット blow=0 #blowの回数をリセット nn=0 #問題の数字の桁カウンターをリセット while : #↓hitおよびblow探しのためのループ do if [ ${an[$nn]} -eq ${nb[$nn]} ] #同じ桁の数字が同じとき then hit=`expr $hit + 1` #hitの回数を1増やす fi mm=0 #入力された数字の桁カウンターをリセット while : #blow探しのためのループ do if [ ${an[$mm]} -eq ${nb[$nn]} -a $nn -ne $mm ] #違う桁の数字が同じとき then blow=`expr $blow + 1` #blowの回数を1増やす fi mm=`expr $mm + 1` #入力された数字の桁カウンターを1増やす if [ $mm -gt 3 ] #入力された数字の桁カウンターが3より多くなったら then break #blow探しはおしまい fi done #入力された数字の次の桁へ nn=`expr $nn + 1` #問題の数字の桁カウンターを1増やす if [ $nn -gt 3 ] #問題の数字の桁カウンターが3より多くなったら then break #hitおよびblow探しはおしまい fi done #問題の数字の次の桁へ if [ $hit -eq 4 ] #全てhitしたら then break #繰り返し終わり fi echo "$hit hit $blow blow" #hit回数とblow回数を表示 echo "$hit hit $blow blow" >> quiz3.txt #hit回数とblow回数を出力 done #以上を繰り返し echo "Your number matches the answer!!" #おわりのメッセージを表示 echo "You answered $anst times to get the answer." #回答回数を表示 echo "Your number matches the answer!!" >> quiz3.txt #おわりのメッセージを出力 echo "You answered $anst times to get the answer." >> quiz3.txt #回答回数を出力 exit #おしまい