猜数字游戏加强版, 熟悉shell的基础语法,shell注意事项
猜数字规则
- 随机生成一个0~99的数字
- 输入错误 直接返回重新输入
- 猜测错误 提示大小 继续猜测(并返回剩余猜测次数)
- 连续猜错5次 退出(提示GAME OVER)
- 猜测正确(返回 you got it!)
Shell备忘
1. 文件模式
windows下的换行(\r\n)与linux(\n)下不同,如果是windows下创建的shell文件,传到linux后,需要在vim下重设格式为linux模式(重新编辑不需要改)
set ff
查看文件模式set ff=unix
设置文件为unix模式注:mac系统换行为(\r)
2. 立即执行
- $()
- ``
推荐最外层用反引号``,内层用$()
rn=$((`head -20 /dev/urandom | cksum | cut -f1 -d “ “` % 100))
$(()) 表示算数运算
3. 各种判断
推荐用法:
[]
用于判断文件(目录)或者变量的存在与否,如 [ -z “a.sh” ][[]]
用于正则判断,如 [[ “$INT” =~ ^-?[0-9]+$ ]](())
用于整数比较和计算,如 (( $gn > $rn )) 、$((chance-count))- !表示否定,如 [ ! -z “a.sh” ]
- 测试: ((1>2)) && echo 111 || echo 222
注: []
和 [[]]
两边必须有空格
4. 函数的返回值
- 可以显示加:return 返回
- 如果不加,将以最后一条命令运行结果,作为返回值
- return后跟数值n(0-255)
如需要其他返回值: 可以通过echo返回字符串,或者操作全局变量
远程执行
拷贝下列命令,在 linux 环境下粘贴执行
1
| bash <(curl -sSL https://gcore.jsdelivr.net/gh/qinxs/cdn-assets@master/demo/guess.sh)
|
猜数字代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| #!/bin/bash
count=0 chance=5
cat << EOF ======= Shell猜数字游戏 ======= # 数字区间[0~99] # 你共有${chance}次机会! # Ctrl+C可强制退出 EOF
rn=$((`head -20 /dev/urandom | cksum | cut -f1 -d " "` % 100))
echoColor(){ declare -A colors colors=( [black]=30 [red]=31 [green]=32 [yellow]=33 [blue]=34 [purple]=35 [skyblue]=36 [white]=37 ) mes="$1" echo -e "\033[${colors[$2]}m${mes}\033[0m" }
chkValue(){ gn="$1" if [ -z "$gn" ]; then echoColor "你还未输入呢" "skyblue" continue elif echo "$gn" | grep -q '[^0-9]'; then echoColor "请输入有效的数字" "red" continue elif (( $gn < 0 )) || (( $gn > 99 )); then echoColor "输入大小有误,请重新输入!" "red" continue fi }
chkCount(){ if (( $1 >= $chance )); then echoColor "${chance}次机会已用完, GAME OVER!" "blue" exit 0 fi }
guess(){ while true; do read -p "请输入你猜测的数字[0~99]:" gn chkValue "$gn" break done
if (( $gn > $rn )); then let "count++" echo '猜大了' echo "剩余猜测次数:$((chance-count))" chkCount $count guess elif (( $gn < $rn )); then let "count++" echo '猜小了' echo "剩余猜测次数:$((chance-count))" chkCount $count guess else echoColor "you got it!!!" "green" fi }
guess
|