猜数字游戏: 随机数字为7位数 猜7次 中间不对 会有例如 : 1A2B的提示, A代表数字正确,位置也正确, B代表包含多少个数字正确但位置不正确
#!/bin/bash
#
# 随机生成四位数
function randomNumber(){
a=(0 1 2 3 4 5 6 7 8 9)
for((i=1;i<5;i++));do
echo -n ${a[$RANDOM % ${#a[*]}]} -------- 利用系统环境变量RANDOM获取随机数,RANDOM的范围是0-32767; echo 不换行循环输出四个数来获取随机四位数
done
}
RANDOM_NUMBER=`randomNumber`
# 测试显示数字,可删除
# echo $RANDOM_NUMBER
# echo '--------------------------------------------'
# A 为数字和位置正确 B 为数字正确但位置不对
# 总共猜7次
TOTAL_SEC=7
SEC=0
while [ $SEC -lt $TOTAL_SEC ];do
read -p "Please input four-digit number: " NUM
# 定义标志位,为后面输出几个A 几个B做统计
FLAG_A=0
FLAG_B=0
# 判断输入是否为四个数字
if [[ $NUM =~ ^[0-9]\{4\}$ ]];then
# 判断用户输入的数字,最终给出多少个A,多少个B
for((i=0;i
if [ $NUM -eq $RANDOM_NUMBER ];then
echo '-------------------------------------------------------'
echo -e "\033[0;31;1mCongratulations!Get it Right!The correct number is: ${RANDOM_NUMBER} \033[0m"
exit
else
if [ ${NUM:$i:1} -eq ${RANDOM_NUMBER:$i:1} ];then ---------- ${NUM:$i:1} 字符串处理,在字符串$NUM 中从位置$i开始提取长度为1的字串
# 标记多少个A
FLAG_A=$(($FLAG_A+1))
else
# 标记多少个B
a=`echo ${RANDOM_NUMBER} | grep -o ${NUM:$i:1} | wc -l`
# echo ${RANDOM_NUMBER} | grep ${NUM:$i:1} >/dev/null 2>&1 && FLAG_B=$(($FLAG_B+1))
FLAG_B=$(($FLAG_B+$a))
fi
# 用户输入数字后判断正确与否的结果
if [[ $i -eq 3 && $SEC -ne 6 ]];then
echo ''
echo -e "\033[0;31;1m${FLAG_A}A${FLAG_B}B\033[0m"
fi
fi
done
else
echo ''
echo -e '\033[0;31;1mInput error,Please input four-digit number again!\033[0m'
fi
SEC=$(($SEC+1))
#提示为最后一次回答
if [ $SEC -eq 6 ];then
echo -e '\033[0;31;1mOne Last Chance!\033[0m'
fi
done
# 输入7次后全部不正确,打印正确答案
if [ $SEC -eq 7 ];then
echo ''
echo -e "\033[0;31;1mNumber is not correct! Number is: ${RANDOM_NUMBER}\033[0m"
exit
fi
此脚本有很多不足地方,望指正.