『忘了再学』Shell流程控制 — 35、多分支case条件语句
1、case条件语句介绍
case
语句和if…elif…else
语句一样都是多分支条件语句,不过和if
多分支条件语句不同的是,case
语句只能判断一种条件关系,而if
语句可以判断多种条件关系。
case
语句语法如下:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac (注:case的反写)
说明:
case
语句和if…elif…else
语句的区别:
case
语句中只能判断一个条件(值),是否符合某一个情况(值),是一种判断。而
if…elif…else
语句,根据上一篇中的示例,我们可以看到if多分支条件语句,可以判断一个输入是否为空,是否是文件,是否是目录等多种条件关系,是不同的判断。
2、case语句需要注意的内容
case
语句,会取出变量中的值,然后与语句体中的值逐一比较。
如果数值符合,则执行对应的程序,如果数值不符,则依次比较下一个值。
如果所有的值都不符合,则执行*)
下的程序,*)
代表所有其他值。case
语句以“case”
开头,以“esac”
结尾。- 每一个分支程序之后要通过
;;
双分号结尾,代表该程序段结束。
3、练习
示例1
#!/bin/bash
# 请输入你需去往的城市
echo "want to beijing,please input 1."
echo "want to shanghai,please input 2."
echo "want to chendu,please input 3."
# 接收输入的信息,赋值给变量cho
read -t 30 -p "please input your choice: " cho
# case条件判断
case $cho in
"1")
echo "to beijin"
;;
"2")
echo "to shanghai"
;;
"3")
echo "to chendu"
;;
*)
echo "error input"
;;
esac
示例2
把上一篇文章if
多分支条件语句的计算机练习中,第三层if
嵌套改成case
语句实现。
#!/bin/bash
# 字符界面加减乘除计算器。
# 1.通过read命令接收要计算的数值,并赋予变量num1和num2
read -t 30 -p "Please input num1: " num1
read -t 30 -p "Please input num2: " num2
# 2.通过read命令接收要计算的符号,并赋予变量ope.
read -t 30 -p "Please input a operator: " ope
# 第一层判断
# 用来判断num1、num2和ope中都有值。
# -n选项:判断后边的字符串是否为空,非空为真。
# -a选项:逻辑与。
if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
then
# 判断输入的num1和num2内容是否是纯数字
# 判断一个变量的内容是否是纯数字有很多方法,下面一种是简单好理解的。
# 定义变量test1和test2的值为$(命令)的结果。
test1=$(echo $num1 | sed 's/[0-9]//g')
test2=$(echo $num2 | sed 's/[0-9]//g')
# 说明:
# 就是通过sed命令,把变量num1值中的每一个字符,只要是0-9的内容,就替换为空。
# 最后如果test1的值最后为空,证明num1变量中的内容全部为数字,因为全部被替换了。
# 如果test1的值最后不为空,证明num1变量中的内容有非数字,即num1非纯数字。
# 第二层判断,用来判断num1和num2为数值。
# 如果变量test1和test2的值为空,则证明numl和num2是数字.
# -z选项:判断字符串是否为空(为空返回真)
# -a选项:逻辑与。
if [ -z "$test1" -a -z "$test2" ]
then
# 如果test1和test2是数字,则执行以下命令。
# 第三层判断用来确认运算符。
# 确认变量$ope中是什么运算符。
case $ope in
"+")
# 如果是加号则执行加法运算。
value=$(($num1+$num2))
;;
"-")
# 如果是减号,则执行减法运算。
value=$(($num1-$num2))
;;
"*")
# 如果是乘号,则执行乘法运算。
value=$(($num1*$num2))
;;
"/")
# 如果是除号,则执行除法运算。
value=$(($num1/$num2))
;;
*)
# 如果运算符不匹配,提示输入有效的符号
echo "Please enter a valid symbol."
# 并退出程序,返回错误代码10。
exit 10
;;
esac
else
# 如果test1和test2不为空,说明numl和num2不是数字。
# 则提示输入有效的数值。
echo "Please enter a valid value."
# 并退出程序,返回错误代码11。
exit 11
fi
else
echo "qing input neirong."
exit 12
fi
# 输出数值运算的结果。
echo "$num1 $ope $num2 :$value"
『忘了再学』Shell流程控制 — 35、多分支case条件语句的更多相关文章
- 『忘了再学』Shell流程控制 — 33、if条件判断语句(一)
目录 1.单分支if条件语句 2.双分支if条件语句 (1)示例1 (2)示例2 什么是流程控制? 普通理解:Shell编写的程序是顺序执行的,也就是说第一命令先执行,然后接着执行第二条命令,然后再下 ...
- 『忘了再学』Shell流程控制 — 34、if条件判断语句(二)
目录 1.多分支if条件语句格式 2.练习 3.说明 4.综合练习 1.多分支if条件语句格式 if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] ...
- 『忘了再学』Shell流程控制 — 39、特殊流程控制语句
目录 1.特殊流程控制语句介绍 2.exit语句 3.break语句 4.continue语句 1.特殊流程控制语句介绍 Shell程序或者说其他的程序,都是顺序执行的,也就是第一行执行完再执行第二行 ...
- 『忘了再学』Shell流程控制 — 36、for循环介绍
目录 1.for循环介绍 2.示例 语法一举例: 语法二举例: 3.for循环总结 4.练习:批量解压缩脚本 方式一:批量解压缩 方式二:批量解压缩 1.for循环介绍 for循环是固定循环,也就是在 ...
- 『忘了再学』Shell流程控制 — 38、while循环和until循环介绍
目录 1.while循环 2.until循环 1.while循环 对while循环来讲,只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止.和for循环的第二种格式for((初始 ...
- 『忘了再学』Shell基础 — 2、Shell的作用与分类
目录 1.Shell的作用 2.Shell的分类 1.Shell的作用 Shell除了能解释用户输入的命令,将它传递给内核,还可以: 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果. 在 ...
- 『忘了再学』Shell基础 — 32、Shell中test测试命令详解
目录 1.test测试命令 (1)test命令介绍 (2)test命令使用方式 (3)示例 2.按照文件类型进行判断 3.按照文件权限进行判断 4.两个文件之间进行比较 5.两个整数之间比较 6.字符 ...
- 『忘了再学』Shell基础 — 1、Shell的介绍
目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
随机推荐
- JVM诊断及工具笔记(4) 使用visualvm分析JVM堆内存泄漏
在这里感谢最近一直阅读我文章的小伙伴,如果觉得文章对你有用,可以帮忙关注转载,需要的时候可以及时找到文章. 背景 今年Q3季度我们在推广业务方使用Iceberg,当时为了让不同业务线的用户可以使用自己 ...
- python入门基础-介绍、基础语法
一.anaconda下的spyder简介 Spyder 是一个强大的交互式 Python 语言开发环境,提供高级的代码编辑.交互测试.调试等特性,支持包括 Windows.Linux 和 OS X 系 ...
- Codeforces Round #677 (Div. 3) D. Districts Connection思维1200
题目链接 Problem - 1433D - Codeforces 题目 美好的一天,从看不懂题目开始~~ Example input 4 5 1 2 2 1 3 3 1 1 1 4 1 1000 1 ...
- 生成二维码,并且保存,指定位置的view成图片,并且保存到本地相册
效果图: 保存的图片效果是: 保存到本地的,是整个视图,不只是单单的二维码的图片, 在了解的一番过程之后,我知道了, 1.首先要去获取保存图片的写入权限:(使用 https://github.com/ ...
- Spring 源码 (1)Spring IOC Bean 创建的整体流程
Spring IOC 中涉及的重要接口 BeanDefinition Bean的描述信息,实现类包括 RootBeanDefinition 和 GenericBeanDefinition,Bean的描 ...
- es6 class解析
直入主题.源代码如下: class A{ aName = 'A' constructor(aAge){ this.aAge = aAge } static aStatic = 'aStatic' } ...
- partTwo自动出题程序
需求介绍 一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做. 二柱立马就想到写一个小程序来做这件事. 这个事情可以用很多语言或者工具来实现: Excel, C/ ...
- APL 和 Web APL 的概述
APL APl ( Application ProgrammingInterface,应用程序编程接口) 是一些预先定义的函数,目的是提供应用程序 与开发人员基于某软件或硬件得以访问一组例程的能力,而 ...
- Postman 正确使用姿势
前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将 ...
- 从零开始安装搭建win10与ubuntu20.04双系统开发环境——集安装、配置、软件、美化、常见问题等于一体的——超详细教程
目录 **前言 ** 关于系统安装配置与软件安装 一.Win10安装ubuntu20.04双系统 1.按照自己的需求分区 2.配置软件镜像源 软件包管理工具介绍 更换APT源--使用国内镜像 3.解决 ...