アプリ版:「スタンプのみでお礼する」機能のリリースについて

#!/bin/bash

# トップ画面
function TOPVIEW()
{
echo "1)クイズ開始"
echo "2)このアプリを終了"
echo "3)アプリについて"
echo "4)クイズ正解率"
while
echo -n "1,2,3,4を選択してください:"
read ANS
do
case $ANS in
1)
echo "正解"
break;;
2)
echo "終了します";;
3)
echo "クイズアプリです";;
4)
echo "正解率は";;
*)
echo "答えは1,2,3,4で入力";;
esac
done
}


# 問題作成

function QUIZ01()
{
echo "問題文"
echo "(a)答えa(b)答えb(c)答えc"
while
echo -n "答えをa,b,cで入力してください:"
read ANS
do
case $ANS in
a)
echo "正解"
break;;
b)
echo "はずれ";;
c)
echo "はずれ";;
*)
echo "答えはa,b,cで入力";;
esac
done
}

function QUIZ02()
{
echo "問題文"
echo "(d)答えd(e)答えe(f)答えf"
while
echo -n "答えをd,e,fで入力してください:"
read ANS
do
case $ANS in
d)
echo "正解"
break;;
e)
echo "はずれ";;
f)
echo "はずれ";;
*)
echo "答えはd,e,fで入力";;
esac
done
}

最初の選択でクイズ開始を選択すると問題文に移行、、
終了を選択すると終了できるようにしたいのですが、
設定がわかりません

どなたか教えてください
お願いします

A 回答 (1件)

正解率を計算するには、関数から return で値を返して


$? で受け取れば良いと思います。
スクリプトの終了は exit です。
クイズの問題自体は、関数の呼び出しを羅列すれば順番に実行されます。
グローバルな問題数定数 ploblems と、2つの補助関数 usage, rate を
追加しました。
スクリプトの最後でメイン関数 TOPVIEW を呼び出します。


#!/bin/bash -ex
declare -g problems=2
usage(){ cat <<_EOS_
1)クイズ開始
2)このアプリを終了
3)アプリについて
4)クイズ正解率
_EOS_
echo -n "1,2,3,4を選択してください:"; }
rate(){ echo "正解率は $(echo "scale=1;$1/$problems"|bc)"; }
function TOPVIEW()
{
local q=0
while
usage
read ANS
do
case $ANS in
1) q=0
QUIZ01; q=$(expr $q + $?)
QUIZ02; q=$(expr $q + $?)
rate $q;;
2) echo "終了します"; exit;;
3) echo "クイズアプリです";;
4) rate $q;;
*) echo "答えは1,2,3,4で入力";;
esac
done
}
function QUIZ01()
{
local q=0
echo "問題文"; echo "(a)答えa(b)答えb(c)答えc"
while
echo -n "答えをa,b,cで入力してください:"
read ANS
do
case $ANS in
a)
echo "正解"
q=1
break;;
b)
echo "はずれ"
break;;
c)
echo "はずれ"
break;;
*)
echo "答えはa,b,cで入力";;
esac
done
return $q
}

function QUIZ02()
{
local q=0
echo "問題文"
echo "(d)答えd(e)答えe(f)答えf"
while
echo -n "答えをd,e,fで入力してください:"
read ANS
do
case $ANS in
d)
echo "正解"
q=1
break;;
e)
echo "はずれ"
break;;
f)
echo "はずれ"
break;;
*)
echo "答えはd,e,fで入力";;
esac
done
return $q
}
TOPVIEW
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!