- ベストアンサー
シェルスクリプトbashについての質問
- # シェルスクリプトbashについての質問
- クイズアプリのシェルスクリプトbashについて質問があります。トップ画面を表示する関数や問題を作成する関数がありますが、終了の選択肢がどのように設定するかわからないとのことです。ご教示いただけますか?
- 要約文3
- みんなの回答 (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