在看选择判断结构之前,请务必先看一下数值比较文件测试

if....else...

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. score=66
  5. # //格式一
  6. if [ $score -lt 60 ]
  7. then
  8. echo "60以下"
  9. elif [ $score -lt 70 ]
  10. then
  11. echo "60-70"
  12. else
  13. echo "70以上"
  14. fi
  15.  
  16. # 格式二
  17. if [ $score -lt 60 ];then
  18. echo "60以下"
  19. elif [ $score -lt 70 ];then
  20. echo "60-70"
  21. else
  22. echo "70以上"
  23. fi

  运行结果:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. 60-70
  3. 60-70
  4. ubuntu@ubuntu:~$

  

支持嵌套if...else....也和其他语言一样,需要注意的是,每一个选择判断分支都要结束(使用if的反写fi)。

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. score=66
  5.  
  6. if [ $score -lt 60 ];then
  7. if [ $score -gt 55 ];then
  8. echo "55-60"
  9. elif [ $score -lt 55 ];then
  10. echo "小于55"
  11. fi
  12. elif [ $score -lt 70 ];then
  13. if [ $score -gt 65 ];then
  14. echo "65-70"
  15. elif [ $score -lt 60 ];then
  16. echo "60-65"
  17. fi
  18. else
  19. echo "70以上"
  20. fi

  运行结果:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. 65-70
  3. ubuntu@ubuntu:~$

  需要注意的是,上面的每一行都是一条命令,如果想要将某几行写在一行,那么要在每一行之后加分号,分号必不可少。

  掌握以上的内容后,看一下这个例子:

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. num=6
  5. if [ $num%2 -eq 0 ]
  6. then
  7. echo "yes"
  8. else
  9. echo "no"
  10. fi

 如果你认为这个脚本可以正常运行,会输出yes的话,那你肯定是被其他语言中的if判断给影响了,不信看一下结果:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. ./test.sh: line 6: [: 6%2: integer expression expected
  3. no
  4. ubuntu@ubuntu:~$

  错误信息很好理解,数学运算的表达式在这里计算的方法或者存在的形式是不对的,那么要怎么才行呢?

  也许你会说将数学计算的表达式使用$((  ))括起来就行了,比如下面:

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. num=6
  5.  
  6. if [ $[ $num % 2 ] -eq 0 ]
  7. #或者下面两种方法
  8. #if [ $(( $num % 2 )) -eq 0 ]
  9. #if [ `expr $num % 2` -eq 0 ]
  10. then
  11. echo "yes"
  12. else
  13. echo "no"
  14. fi

  运行:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. yes
  3. ubuntu@ubuntu:~$

  推荐使用$[ command ] 来进行整数计算

case

  以case开始,以esac结尾(case反着写),每一个switch不用谢break,默认满足其中一个就会break。

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. read -p "please input number: " week
  5.  
  6. case $week in
  7. 1 | 2 | 3 | 4 | 5 )
  8. echo "I'm working";;
  9. 6 | 7)
  10. echo "I'm playing";;
  11. *) #类似去其他语言中的default
  12. echo "I'm dying";;
  13. esac

  运行:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. please input number: 6
  3. I'm playing
  4. ubuntu@ubuntu:~$ ./test.sh
  5. please input number: 1
  6. I'm working
  7. ubuntu@ubuntu:~$ ./test.sh
  8. please input number:8
  9. I'm dying
  10. ubuntu@ubuntu:~$

  其中每一个匹配的部分可以是常量或者变量,需要注意的是匹配的部分后面必须有右括号,然后每一种情况都要使用两个分号分隔。 从上之下开始匹配,一旦匹配,则执行相应的命令,不再进行后续的匹配判断。

  *)表示前面所有情况都不匹配时,才执行下面的操作,一般用在最后,和其他语言中的default相同。

  另外case的匹配模式中,如果有多个匹配之后的操作都相同时,可以使用|来将多个匹配模式写在一起,表示或者,只要满足其中一个 模式,就执行这条语句。

  在指定条件的地方,还可以是正则表达式

  当然,还有一种情况也可以达到这种类似的效果,如下:

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. read -p "please input the key: " key
  5. case $key in
  6. [a-z] | [A-Z])
  7. #注意上面一条命令中间使用了|
  8. echo "alpha";;
  9. [0-9])
  10. echo "number";;
  11. *)
  12. echo "other key"
  13. esac

  运行:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. please input the key: a
  3. alpha
  4. ubuntu@ubuntu:~$ ./test.sh
  5. please input the key: 2
  6. number
  7. ubuntu@ubuntu:~$ ./test.sh
  8. please input the key: !
  9. other key
  10. ubuntu@ubuntu:~$

  

  

shell脚本--分支、条件判断的更多相关文章

  1. Shell脚本IF条件判断和判断条件总结

    转自:http://m.jb51.net/article/56553.htm 这篇文章主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结 ...

  2. Shell脚本的条件控制和循环语句

    条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expre ...

  3. Shell脚本的条件测试与比较

    Shell脚本的条件测试与比较 一.shell脚本的条件测试 通常,在bash的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结构执行不同的操作,有时也会与if等条件语句相结合,来完成测试 ...

  4. shell脚本之六:shell脚本的条件测试与比较

    六.shell脚本的条件测试与比较 (一)条件表达式的常见语法 1.条件表达式6种写法(if,while) 语法1:test<测试表达式> 语法2:[ <测试表达式>] #中括 ...

  5. Shell学习(六)——条件判断总结

    Shell学习(六)--条件判断总结 [1]https://www.cnblogs.com/zhw-626/p/8528001.html [2]https://www.cnblogs.com/yizh ...

  6. shell脚本学习—条件测试和循环语句

    条件测试 1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假, 则命令的Exit Status为1(注意与 ...

  7. shell中的条件判断以及与python中的对比

    shell中比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格. if ....; then          ...

  8. 【shell脚本语法】判断、流程控制语句

    目录 判断用户参数 流程控制语句 一.判断用户参数 1.1 文件判断参数 PS:$?代表上一个命令的返回值,为0表示正确执行,非0表示错误执行.详情可参考我另一篇博客:https://www.cnbl ...

  9. linux shell中的条件判断语句

    http://bbs.chinaunix.net/thread-396805-1-1.html shell 判断语句 流程控制 "if" 表达式 如果条件为真则执行then后面的部 ...

  10. Shell学习笔记 - 条件判断式

    1. 判断格式 1) test 参数 文件 例: test -e /root/install.log 2) [ 参数 文件 ]  -- 推荐使用 例: [ -e /root/install.log ] ...

随机推荐

  1. vue框架简介

    MVVM框架概述 什么是vue 是一套构建用户界面的渐进式(用到哪一块就用哪一块,不需要全部用上)前端框架,Vue 的核心库只关注视图层 vue的兼容性 Vue.js 不支持 IE8 及其以下版本,因 ...

  2. Django-组件拾遗

    Django的缓存机制 1.1 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候 ...

  3. MyCat读写分离、分库分表

    系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...

  4. [NOIP2018]保卫王国

    嘟嘟嘟 由于一些知道的人所知道的,不知道的人所不知道的原因,我来发NOIP2018day2T3的题解了. (好像我只是个搬运工--) 这题真可以叫做NOIplus了,跟其他几道比较水的题果然不一样,无 ...

  5. Java相关框架资料及其基础资料、进阶资料、测试资料之分享

    个人说明:只为分享,不为其他,愿所有的程序员们在编程的世界自由翱翔吧! 在我看来,只有不断实战,不断学习,不断积累,不断归纳总结,形成自己的核心竞争力,方能在未来竞争中脱颖而出! 程序员谨记!重要的事 ...

  6. define和const的一点点小知识

    define篇 1.#define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”. 被定义为“宏”的标识符称为“宏名”. 在编译预处理时,对程序中所有出现的“宏名”,都 ...

  7. IntelliJ IDEA 常用设置 (二)

    一. 代码提示和补充功能有一个特性:区分大小写. 区分大小写的情况是这样的:比如我们在 Java 代码文件中输入 stringBuffer IntelliJ IDEA 是不会帮我们提示或是代码补充的, ...

  8. 3.5《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—第三章小结

    本章使用的重要命令总结在Table 5中 命令 描述 示例 curl 与URL交互 $ curl -O example.com which 指出程序的在计算机的路径 $ echo bar >&g ...

  9. Ionic 动态配置url路由的设置

    随着Ionic App功能的不断增加,需要路由的url设置就越来越多,不喜欢在config函数中写一堆硬代码,一则不美,二则维护起来也麻烦,能不能把这些数据独立出来呢? 经过查找资料与各种实验,最终找 ...

  10. Luogu P1546 最短网络 Agri-Net

    其实这道题根本没必要写,但为了测试vector+堆优化的Prim试一发. 再次觉得Prim和Dijkstra很像,堆优化版本也差不多. 和Dijkstra一样,Prim也是在之前的dis点中选取一个最 ...