shell if case for 几个条件的混合使用

Posted you see data

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell if case for 几个条件的混合使用相关的知识,希望对你有一定的参考价值。

这段时间学习shell 脚本开发,本来一开始只打算写个 if 多分支判断,后来一不小心一发不可收拾,就把条件判断都尝试写了下。

一个比较简单的游戏,分7个模式,可以不开上帝视角玩下,看哪关的成功率最高。

  1 #!/bin/bash
  2 usage() {
  3     cat <<EOF
  4     
  5 EOF
  6 }
  7 
  8 
  9 main() {
 10 
 11     echo "猜分数赢大奖 (0-100)"
 12     echo "请选择难度:"
 13     echo ‘#########################################‘
 14     echo "1,试下牛刀:50-100,7次机会"  
 15     echo "2,不过尔尔:0- 100,7次机会"
 16     echo "3,俯视众生:50-100,4次机会"
 17     echo "4,我是菜鸟:0- 100,4次机会"
 18     echo "5,我是主宰:50-100,2次机会"
 19     echo "6,上帝视角,0- 100,2次机会"
 20     echo ‘#########################################‘
 21     echo ""
 22     read -p "输入当前关卡难度:" difficulty
 23     case $difficulty in
 24         1 )
 25             init_num=50
 26             max_try=7
 27             echo "游戏难度级别:1,玩的开心"
 28             ;;
 29         2 )
 30             init_num=1
 31             max_try=7
 32             echo "游戏难度级别:2,祝你好运"
 33             ;;
 34         3 )
 35             init_num=50
 36             max_try=4
 37             echo "游戏难度级别:3,学霸你好"
 38             ;;
 39         4 )
 40             init_num=1
 41             max_try=4
 42             echo "游戏难度级别:4,大牛你好"
 43             ;;
 44         5 )
 45             init_num=50
 46             max_try=2
 47             echo "游戏难度级别:5,珍爱生命"
 48             ;;
 49         6 )
 50             init_num=1
 51             max_try=2
 52             echo "游戏难度级别:6,上帝你好"
 53             ;;
 54         * )
 55             init_num=50
 56             max_try=1
 57             echo "恭喜你获得隐藏关卡:地狱模式"
 58             ;;
 59     esac
 60 
 61     bingo_num=$[RANDOM%100]
 62     lucky_num=$[$bingo_num + $init_num]
 63 
 64     if [[ $lucky_num -gt 100 ]]; then
 65         lucky_num=$bingo_num
 66     fi
 67 
 69     for (( i = 1; i <= $max_try; i++ )); do
 70         case $i in
 71             1) read -p "游戏开始,请输入你的分数:" GRADE
 72                 ;;
 73             *) read -p "请再次输入你的分数:" GRADE
 74                 ;;
 75         esac
 76 
 77         result=$[$GRADE-$lucky_num]
 78 
 79         if [[ $result -ge 50 && $result -le 100 ]]; then
 80             echo "你的分数:$GRADE ! 远远大于幸运号码"
 81         elif [[ $result -ge 10 && $result -le 49 ]]; then
 82             echo "你的分数:$GRADE 分! 稍微大于幸运号码"
 83         elif [[ $result -gt 0 && $result -le 10 && $result -ne 0 ]]; then
 84             echo "你的分数:$GRADE 分! 就比幸运号码大一丢丢啦"
 85         elif [[ $result -ge -10 && $result -lt 0 && $result -ne 0 ]]; then
 86             echo "你的分数:$GRADE 分! 离幸运号码就差一小丢丢"
 87         elif [[ $result -eq 0 ]]; then
 88             echo ""
 89             echo "BINGO!!! 恭喜!!!!"
 90             echo "幸运号码:$lucky_num,请带上身份证原件还有299元手续费来领奖 "
 91             case $difficulty in
 92                 3 ) echo "学霸带我一起飞吧" ;;
 93                 4 ) echo "大牛给个大腿吧" ;;
 94                 5 ) echo "少年传授你一本绝世秘籍吧" ;;
 95                 6 ) echo "上帝快来救救我吧,我被传销迫害" ;;
 96                 * ) echo "你一定是从外星空来的"
 97                     ;;
 98             esac
 99             exit 0
100         elif [[ $result -gt -50 && $result -lt -10 ]]; then
101             echo "你的分数:$GRADE 分! 比幸运号码小 "
102         elif [[ $result -lt -50 ]]; then
103             echo "你的分数:$GRADE 分! 远远小于幸运号码 "
104         fi
105 
106         echo "还有 $[$max_try-$i] 次机会"
107         echo ""
108 
109         if [[ $i -eq $max_try ]]; then
110             echo "非常抱歉你的次数你全部用完,离大奖就差一点点。"
111             echo "你可以选择:"
112             echo ‘#########################################################################‘
113             echo "1.消费100购买全部次数"
114             echo "2.临时工"
115             echo "3.试试手气"
116             echo "其他任意键盘结束游戏" 
117             echo ‘#########################################################################‘
118             
119             read -p "请选择:" choose
120             echo ""
121             case $choose in
122                 1) 
123                     read -p "请输入金额:" money
124                     if [[ $money -le 100 ]]; then
125                         read -p "确认购买 y/n?" confirm
126                         if [[ $confirm == [yY] ]]; then
127                             echo "购买成功,信春哥满血复活!"
128                             echo ""
129                             i=0
130                         else
131                             echo "没关系,说不定下轮大奖就是你的"
132                         fi
133                     else
134                         echo "金额不对哦,无法购买"
135                     fi
136                     ;;
137                 3)
138                     echo "天灵灵,地灵灵,请老天再给我一次机会把"
139                     echo ""
140                     read -p "按任意键试下你的上帝之手吧" lucky_try
141                     case $lucky_try in
142                         *) echo ""
143                         ;;
144                     esac
145                     guess_again=$[RANDOM+1 % 100]
146                     if [[ $GRADE_again -eq $lucky_num ]]; then
147                         echo "恭喜你很荣幸的获得上天的眷顾"
148                         echo "女神恩赐了你两次机会,请珍惜!"
149                         for (( j = 1; j < 2; j++ )); do
150                             case $j in
151                                 0) read -p "请输入你的第一次眷顾:" GRADE_again
152                                         ;;
153                                 *) read -p "请再次输入你的分数:" GRADE_again
154                                         ;;
155                             esac
156                                 
157                             result_again=$[$GRADE_again-$lucky_num]
158 
159                             if [[ $result_again -eq 0 ]]; then
160                                 echo "大奖号码:$lucky_num 恭喜通过眷顾机会获得超级大奖,通知所有今晚吃鸡翅!!!!"
161                                 exit 0
162                             elif [[ $result -ne 0 ]]; then
163                                 echo "你此次的眷顾结果运气就差一点点"
164                             fi
165                             echo "还剩 $[2-$j] 次眷顾机会"
166                             echo ""
167                         done
168                     else
169                         echo "没被眷顾倒,运气就差一点点"
170                     fi
171                     ;;
172                 *)
173                     echo "没关系,说不定下轮大奖就是你的"
174             esac
175         fi
176     done
177 }
178 
179 main "[email protected]"
180 
181 exit 0

 

以上是关于shell if case for 几个条件的混合使用的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本之 if,case,for的用法

[Shell]条件判断与流程控制:if, case, for, while, until

shell编程之if语法case语法while语句until语句for语句select语句

shell基础

shell的编程结构体

Shell编程