目的:使用shell编写一个交互式问答脚本
具体描述:
需要做答的问题存储在一个文件中,问题内容格式如下:
1. the first question()
A. xxxx B. xxxx
C. xxxx D. xxxx
2. the second question()
A. xxxx B. xxxx
C. xxxx D. xxxx
3. the third question()
A. xxxx B. xxxx
C. xxxx D. xxxx
.....
然后循环遍历,每次显示一个问题,等待用户输入,用户输入的答案存到另一个文件中。
脚本如下:
#!/bin/bash
##############################
# Author: lizw
# Date: 2015/09/17 22:27
# Authority: Anyone
#############################
numberflag=0 #行开头数字标志
lineNo=0 #行数
firstHeadSpaceLine=0 #开头的空白行数,主要用在输出显示中。下面没有用到
#删除答案文件
# 改进之处:
# 每次运行脚本,可向答案文件中追加时间和分割线
# 分割每次输入的答案,做历史记录
if [ -f answer.txt ]
then
rm -f answer.txt
fi
while read line
do
########### Begin 统计开头空白行数 ############
if [ $lineNo -eq 0 -a -z "$line" ]
then
firstHeadSpaceLine=$((firstHeadSpaceLine+1))
continue
fi
########### end 统计开头空白行数 ############
#求取问题文件的行数(除去开头空白行)
lineNo=$((lineNo+1))
################ Begin ######################
# 本段代码解释如下:
# 通过判断每行开头是否是数字,形成问题数组
# 即每一道题所占的行数形成一个数组元素
num=$(echo $line |cut -d'.' -f 1)
expr $num + 0 >/dev/null 2>&1
if [ $? -eq 0 ]
then
numberArray[numberflag]=$lineNo
numberflag=$((numberflag+1))
fi
################ End ######################
done < quizzTxt.txt
#arrayLength=${#numberArray[@]}
#echo $arrayLength
flag=0 #间隔取数标志
firstNum=0
secondNum=0
for var in ${numberArray[*]}
do
if [ $flag -eq 0 ]
then
firstNum=$var
flag=$((flag+1))
continue
fi
secondNum=$var
for ((i=$firstNum; i<$secondNum;i++))
do
#echo $(sed -n "$firstNum, $((secondNum-1))"p quizzTxt.txt)
echo $(sed -n "$i, $i"p quizzTxt.txt)
done
read answer
echo $answer >> answer.txt
firstNum=$secondNum
done
#追加最后一道题答案
for ((i=$firstNum; i<=$(cat quizzTxt.txt | wc -l); i++))
do
echo $(sed -n "$i, $i"p quizzTxt.txt)
done
read answer
echo $answer >> answer.txt
具体可参考文件。