首页 > 代码库 > shell if case for 几个条件的混合使用

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 0100         elif [[ $result -gt -50 && $result -lt -10 ]]; then101             echo "你的分数:$GRADE 分! 比幸运号码小 "102         elif [[ $result -lt -50 ]]; then103             echo "你的分数:$GRADE 分! 远远小于幸运号码 "104         fi105 106         echo "还有 $[$max_try-$i] 次机会"107         echo ""108 109         if [[ $i -eq $max_try ]]; then110             echo "非常抱歉你的次数你全部用完,离大奖就差一点点。"111             echo "你可以选择:"112             echo ‘#########################################################################‘113             echo "1.消费100购买全部次数"114             echo "2.临时工"115             echo "3.试试手气"116             echo "其他任意键盘结束游戏" 117             echo ‘#########################################################################‘118             119             read -p "请选择:" choose120             echo ""121             case $choose in122                 1) 123                     read -p "请输入金额:" money124                     if [[ $money -le 100 ]]; then125                         read -p "确认购买 y/n?" confirm126                         if [[ $confirm == [yY] ]]; then127                             echo "购买成功,信春哥满血复活!"128                             echo ""129                             i=0130                         else131                             echo "没关系,说不定下轮大奖就是你的"132                         fi133                     else134                         echo "金额不对哦,无法购买"135                     fi136                     ;;137                 3)138                     echo "天灵灵,地灵灵,请老天再给我一次机会把"139                     echo ""140                     read -p "按任意键试下你的上帝之手吧" lucky_try141                     case $lucky_try in142                         *) echo ""143                         ;;144                     esac145                     guess_again=$[RANDOM+1 % 100]146                     if [[ $GRADE_again -eq $lucky_num ]]; then147                         echo "恭喜你很荣幸的获得上天的眷顾"148                         echo "女神恩赐了你两次机会,请珍惜!"149                         for (( j = 1; j < 2; j++ )); do150                             case $j in151                                 0) read -p "请输入你的第一次眷顾:" GRADE_again152                                         ;;153                                 *) read -p "请再次输入你的分数:" GRADE_again154                                         ;;155                             esac156                                 157                             result_again=$[$GRADE_again-$lucky_num]158 159                             if [[ $result_again -eq 0 ]]; then160                                 echo "大奖号码:$lucky_num 恭喜通过眷顾机会获得超级大奖,通知所有今晚吃鸡翅!!!!"161                                 exit 0162                             elif [[ $result -ne 0 ]]; then163                                 echo "你此次的眷顾结果运气就差一点点"164                             fi165                             echo "还剩 $[2-$j] 次眷顾机会"166                             echo ""167                         done168                     else169                         echo "没被眷顾倒,运气就差一点点"170                     fi171                     ;;172                 *)173                     echo "没关系,说不定下轮大奖就是你的"174             esac175         fi176     done177 }178 179 main "$@"180 181 exit 0

 

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