shell脚本--分支、条件判断
在看选择判断结构之前,请务必先看一下数值比较与文件测试
if....else...
- #!/bin/bash
- #文件名:test.sh
- score=66
- # //格式一
- if [ $score -lt 60 ]
- then
- echo "60以下"
- elif [ $score -lt 70 ]
- then
- echo "60-70"
- else
- echo "70以上"
- fi
- # 格式二
- if [ $score -lt 60 ];then
- echo "60以下"
- elif [ $score -lt 70 ];then
- echo "60-70"
- else
- echo "70以上"
- fi
运行结果:
- ubuntu@ubuntu:~$ ./test.sh
- 60-70
- 60-70
- ubuntu@ubuntu:~$
支持嵌套if...else....也和其他语言一样,需要注意的是,每一个选择判断分支都要结束(使用if的反写fi)。
- #!/bin/bash
- #文件名:test.sh
- score=66
- if [ $score -lt 60 ];then
- if [ $score -gt 55 ];then
- echo "55-60"
- elif [ $score -lt 55 ];then
- echo "小于55"
- fi
- elif [ $score -lt 70 ];then
- if [ $score -gt 65 ];then
- echo "65-70"
- elif [ $score -lt 60 ];then
- echo "60-65"
- fi
- else
- echo "70以上"
- fi
运行结果:
- ubuntu@ubuntu:~$ ./test.sh
- 65-70
- ubuntu@ubuntu:~$
需要注意的是,上面的每一行都是一条命令,如果想要将某几行写在一行,那么要在每一行之后加分号,分号必不可少。
掌握以上的内容后,看一下这个例子:
- #!/bin/bash
- #文件名:test.sh
- num=6
- if [ $num%2 -eq 0 ]
- then
- echo "yes"
- else
- echo "no"
- fi
如果你认为这个脚本可以正常运行,会输出yes的话,那你肯定是被其他语言中的if判断给影响了,不信看一下结果:
- ubuntu@ubuntu:~$ ./test.sh
- ./test.sh: line 6: [: 6%2: integer expression expected
- no
- ubuntu@ubuntu:~$
错误信息很好理解,数学运算的表达式在这里计算的方法或者存在的形式是不对的,那么要怎么才行呢?
也许你会说将数学计算的表达式使用$(( ))括起来就行了,比如下面:
- #!/bin/bash
- #文件名:test.sh
- num=6
- if [ $[ $num % 2 ] -eq 0 ]
- #或者下面两种方法
- #if [ $(( $num % 2 )) -eq 0 ]
- #if [ `expr $num % 2` -eq 0 ]
- then
- echo "yes"
- else
- echo "no"
- fi
运行:
- ubuntu@ubuntu:~$ ./test.sh
- yes
- ubuntu@ubuntu:~$
推荐使用$[ command ] 来进行整数计算
case
以case开始,以esac结尾(case反着写),每一个switch不用谢break,默认满足其中一个就会break。
- #!/bin/bash
- #文件名:test.sh
- read -p "please input number: " week
- case $week in
- 1 | 2 | 3 | 4 | 5 )
- echo "I'm working";;
- 6 | 7)
- echo "I'm playing";;
- *) #类似去其他语言中的default
- echo "I'm dying";;
- esac
运行:
- ubuntu@ubuntu:~$ ./test.sh
- please input number: 6
- I'm playing
- ubuntu@ubuntu:~$ ./test.sh
- please input number: 1
- I'm working
- ubuntu@ubuntu:~$ ./test.sh
- please input number:8
- I'm dying
- ubuntu@ubuntu:~$
其中每一个匹配的部分可以是常量或者变量,需要注意的是匹配的部分后面必须有右括号,然后每一种情况都要使用两个分号分隔。 从上之下开始匹配,一旦匹配,则执行相应的命令,不再进行后续的匹配判断。
*)表示前面所有情况都不匹配时,才执行下面的操作,一般用在最后,和其他语言中的default相同。
另外case的匹配模式中,如果有多个匹配之后的操作都相同时,可以使用|来将多个匹配模式写在一起,表示或者,只要满足其中一个 模式,就执行这条语句。
在指定条件的地方,还可以是正则表达式
当然,还有一种情况也可以达到这种类似的效果,如下:
- #!/bin/bash
- #文件名:test.sh
- read -p "please input the key: " key
- case $key in
- [a-z] | [A-Z])
- #注意上面一条命令中间使用了|
- echo "alpha";;
- [0-9])
- echo "number";;
- *)
- echo "other key"
- esac
运行:
- ubuntu@ubuntu:~$ ./test.sh
- please input the key: a
- alpha
- ubuntu@ubuntu:~$ ./test.sh
- please input the key: 2
- number
- ubuntu@ubuntu:~$ ./test.sh
- please input the key: !
- other key
- ubuntu@ubuntu:~$
shell脚本--分支、条件判断的更多相关文章
- Shell脚本IF条件判断和判断条件总结
转自:http://m.jb51.net/article/56553.htm 这篇文章主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结 ...
- Shell脚本的条件控制和循环语句
条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expre ...
- Shell脚本的条件测试与比较
Shell脚本的条件测试与比较 一.shell脚本的条件测试 通常,在bash的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结构执行不同的操作,有时也会与if等条件语句相结合,来完成测试 ...
- shell脚本之六:shell脚本的条件测试与比较
六.shell脚本的条件测试与比较 (一)条件表达式的常见语法 1.条件表达式6种写法(if,while) 语法1:test<测试表达式> 语法2:[ <测试表达式>] #中括 ...
- Shell学习(六)——条件判断总结
Shell学习(六)--条件判断总结 [1]https://www.cnblogs.com/zhw-626/p/8528001.html [2]https://www.cnblogs.com/yizh ...
- shell脚本学习—条件测试和循环语句
条件测试 1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假, 则命令的Exit Status为1(注意与 ...
- shell中的条件判断以及与python中的对比
shell中比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格. if ....; then ...
- 【shell脚本语法】判断、流程控制语句
目录 判断用户参数 流程控制语句 一.判断用户参数 1.1 文件判断参数 PS:$?代表上一个命令的返回值,为0表示正确执行,非0表示错误执行.详情可参考我另一篇博客:https://www.cnbl ...
- linux shell中的条件判断语句
http://bbs.chinaunix.net/thread-396805-1-1.html shell 判断语句 流程控制 "if" 表达式 如果条件为真则执行then后面的部 ...
- Shell学习笔记 - 条件判断式
1. 判断格式 1) test 参数 文件 例: test -e /root/install.log 2) [ 参数 文件 ] -- 推荐使用 例: [ -e /root/install.log ] ...
随机推荐
- vue框架简介
MVVM框架概述 什么是vue 是一套构建用户界面的渐进式(用到哪一块就用哪一块,不需要全部用上)前端框架,Vue 的核心库只关注视图层 vue的兼容性 Vue.js 不支持 IE8 及其以下版本,因 ...
- Django-组件拾遗
Django的缓存机制 1.1 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候 ...
- MyCat读写分离、分库分表
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- [NOIP2018]保卫王国
嘟嘟嘟 由于一些知道的人所知道的,不知道的人所不知道的原因,我来发NOIP2018day2T3的题解了. (好像我只是个搬运工--) 这题真可以叫做NOIplus了,跟其他几道比较水的题果然不一样,无 ...
- Java相关框架资料及其基础资料、进阶资料、测试资料之分享
个人说明:只为分享,不为其他,愿所有的程序员们在编程的世界自由翱翔吧! 在我看来,只有不断实战,不断学习,不断积累,不断归纳总结,形成自己的核心竞争力,方能在未来竞争中脱颖而出! 程序员谨记!重要的事 ...
- define和const的一点点小知识
define篇 1.#define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”. 被定义为“宏”的标识符称为“宏名”. 在编译预处理时,对程序中所有出现的“宏名”,都 ...
- IntelliJ IDEA 常用设置 (二)
一. 代码提示和补充功能有一个特性:区分大小写. 区分大小写的情况是这样的:比如我们在 Java 代码文件中输入 stringBuffer IntelliJ IDEA 是不会帮我们提示或是代码补充的, ...
- 3.5《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—第三章小结
本章使用的重要命令总结在Table 5中 命令 描述 示例 curl 与URL交互 $ curl -O example.com which 指出程序的在计算机的路径 $ echo bar >&g ...
- Ionic 动态配置url路由的设置
随着Ionic App功能的不断增加,需要路由的url设置就越来越多,不喜欢在config函数中写一堆硬代码,一则不美,二则维护起来也麻烦,能不能把这些数据独立出来呢? 经过查找资料与各种实验,最终找 ...
- Luogu P1546 最短网络 Agri-Net
其实这道题根本没必要写,但为了测试vector+堆优化的Prim试一发. 再次觉得Prim和Dijkstra很像,堆优化版本也差不多. 和Dijkstra一样,Prim也是在之前的dis点中选取一个最 ...