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
时间: 2024-10-13 17:13:19

shell if case for 几个条件的混合使用的相关文章

Linux下shell中case命令详解(常规的break、无条件继续和有条件继续)

linux下shell中的case名字和C/C++中的switch类似,但是shell中的case更强大和复杂. 1.强大主要体现在:shell中case中的关键字可以是字符串类型,而每一项中可以包含正则表达式. 2.复杂主要体现在:shell中case的每一个项后有三个选择:break(常规的break).unconditional follow up(无条件继续)和conditional follow up(有条件继续). 这篇文章的重点是上面的第2点. case的无条件继续和有条件继续是b

shell编程--case判断

case基础语法:格式 case??变量名 invalue1)command;;value2)command;;*)commond;;esac在case程序中,可以在条件中使用|,表示或的意思, 比如? ??2|3)command;;脚本 [[email protected] shell]# vim case.sh #!/bin/bash read -p "Please input a number: " n if [ -z "$n" ] then echo &qu

shell的case脚本的简单入门

shell的case脚本的简单入门 示例1: #/bin/bash a=$1 case "$a" in "2") echo 'hell 2';; "3") echo 'hell 3';; *) echo "$a not match";; esac 示例2:判断压缩文件后缀: #/bin/bash file_type=$(file $1) case "$file_type" in "$1: gzip

(九)shell中case语句、程序传参、while

2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中的switch case不同.shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break). 2.2.6.2.调用shell程序的传参(1)C语言中可以通过main函数的argc和argv给程序传参(详情参考<4.

求 1+2+...+n, 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句 (A?B:C)。

求 1+2+...+n,要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). #include <bits/stdc++.h> using namespace std; int Sum(int n) { int Ret = 0; n == 0 || (Ret = Sum(n-1)); return n + Ret; } class A{ public: A() { sum += ++n; } static int sum;

题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)

题目:求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 分析:这道题没有多少实际意义,因为在软件开发中不会有这么变态的限制.但这道题却能有效地考查发散思维能力,而发散思维能力能反映出对编程相关技术理解的深刻程度. 通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路.由于已经明确限制for和while的使用,循环已经不能再用了.同样,递归函数也需要用if语句或者条件判断语句来判断是继续

Shell语法—— case 条件语句

case 条件语句语法 case 条件语句语法格式为: case " 变量 " in 值 1) 指令 1 ;; 值 2) 指令 2 ;; \* ) 指令 3 ;; esac 了解即可 给字体加颜色的命令:例:echo -e "\E[1;31m 红颜色 hello world \E[0m" \E 等同于 \033 "[1" 数字 1 表示加粗显示 31m 表示红色字体 "[0m" 表示关闭所有属性 "[1m"

理论+实操:shell之case语句for/while/until循环语句、函数、数组-满满的干货

前言: 单引号表示纯符号 用双引号表字符串 case多分支语句 循环语句 for循环语句 while循环语句 until循环语句 shell函数 shell数组 一 : case语句的结构 1.1 case结构 多分支表现形式:if语句,case语句 case 语句可以使用正则表达式,正则表达式后面会去阐述 针对变量的不同取值,分别执行不同的命令程序 case 中::表示一句话的结束 如果匹配某一个固定值,大多数用caes,其适用于某一个固定值 如果匹配某一个区间范围,大多数用if else 语

shell 之case

在shell 脚本中,除了用if来判断逻辑外,还有一种常用的方式,那就是case了.具体格式为: case 变量in value1) command ;; value2) command ;; value3) command ;; *) command ;; esac 举例: [[email protected] ~]# cat case.sh #/bin/bash read -p "input a number:" n a=$[$n%2] case $a in 1) echo &qu