Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2862

LinuxでLinuCスピードマスター問題集を効率的(?)に勉強する方法

$
0
0
LinuxでLinuCスピードマスター問題集を早く勉強する方法です。 LinuC Lv1 102を受けようと思っていて、どの問題が正解でどの問題が不正解か、みたいなことを記録するプログラムです。 初期化(init.sh) 必要なファイルを作成します。 #!/bin/bash echo "Init..." echo "Creating files..." echo "-" > l echo "0" > c echo "0" > w mkdir ans > /dev/null 2>&1 cat > start.sh << "EOF" #!/bin/bash echo "LinuC スピードマスター 問題集専用学習スクリプト by okaits" echo "For Lv1 Ver10.0" echo "前回学習したところ: $(cat l)" echo "Init..." C=0 c=0 w=0 sleep 0.8s while true do read -p "問題番号(endで終了)> " m if [ $m = "end" ] then echo "お疲れ様でした。" echo "解いた問題数: $C" echo "正答: $c" echo "正答(累計): $(cat c)" echo "誤答: $w" echo "誤答(累計): $(cat w)" exit 0 fi echo "問題$mが選択されました。" read -p "解答> " n read -p "正誤(True or False)> " b tC=$(($C + 1)) C=$tC echo $m > l case $b in True) k="$(($(cat c) + 1))" tc="$(($c + 1))" c=$tc echo $k > c echo "OK, ans: $n" > ans/$m;; False) k="$(($(cat w) + 1))" tw="$(($w + 1))" w=$tw echo $k > w echo $m > wronglist echo "NO, ans: $n" > ans/$m;; esac done EOF chmod +x start.sh ln -s $0 reset.sh sleep 0.8s echo "Done." echo "Init Done." メインスクリプト(start.sh)(初期化の後に作成される) 初期化の後に作成されるメインスクリプトです。 #!/bin/bash echo "LinuC スピードマスター 問題集専用学習スクリプト by okaits" echo "For Lv1 Ver10.0" echo "前回学習したところ: $(cat l)" echo "Init..." C=0 c=0 w=0 sleep 0.8s while true do read -p "問題番号(endで終了)> " m if [ $m = "end" ] then echo "お疲れ様でした。" echo "解いた問題数: $C" echo "正答: $c" echo "正答(累計): $(cat c)" echo "誤答: $w" echo "誤答(累計): $(cat w)" exit 0 fi echo "問題$mが選択されました。" read -p "解答> " n read -p "正誤(True or False)> " b tC=$(($C + 1)) C=$tC echo $m > l case $b in True) k="$(($(cat c) + 1))" tc="$(($c + 1))" c=$tc echo $k > c echo "OK, ans: $n" > ans/$m;; False) k="$(($(cat w) + 1))" tw="$(($w + 1))" w=$tw echo $k > w echo $m > wronglist echo "NO, ans: $n" > ans/$m;; esac done 解説 分かりにくい所を説明します。 4行目 $(cat l) 4行目にある$(cat 1)は、「cat lを実行した結果を埋め込む」という意味で、lには最後に解いた問題番号が記録されています。 6~8行目 変数定義 6~8行目は変数定義です。 Cが今回解いた問題の数、 cが今回解いた問題の中の正答数、 wが今回解いた問題の中の誤答数です。 26, 31行目 tc="$(($c + 1)), tw="$(($w + 1)) c="$(($c + 1))"やw="$(($w + 1))"だとbashだと 1. c(またはw)を初期化する 2. $c + 1を計算する 3. 計算結果をcに入れる のように解釈されてしまいます。なので、これを回避するために遠回りしています。 使い方 init.shを実行する(初回のみ) start.shを実行する ちなみに、今まで解いた問題の答えはans/にあります。

Viewing all articles
Browse latest Browse all 2862

Trending Articles