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

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脚本--分支、条件判断的更多相关文章

  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. File类_删除一个带内容的目录_练习

    需求:删除一个带内容的目录 原理:必须从最里面往外删除需要深度遍历 import java.io.File; public class RemoveDirTest { public static vo ...

  2. mybatis collection使用注意

    背景 今天我在使用collection时候,出现数据库有两条数据,但是却返回一条,在复制这条数据到四条后,依然返回一条 分析 这四条数据,数据库的每个字段值完全相同,所以估计是当成一条处理了 如果随便 ...

  3. hibernate validator 动态返回国际化提示

    一.说明 以下方法实现了读取指定国际化文件的校验器. 1. MyMessages是自定义的国际化文件,放置在src的根目录下 例如有MyMessages_en_US.properties.MyMess ...

  4. MongoDB数据库中更新与删除数据

    MongoDB数据库中更新与删除数据 在MongoDB数据库中,可以使用Collection对象的update方法更新集合中的数据文档.使用方法如下所示: collection.update(sele ...

  5. linux下模拟一个木马程序运行过程

    预备知识: 将一个程序放入到后台,悄悄的执行 ./xxx.sh & 进程: 用户进程:由用户来管理 系统进程:由系统内核自行管理 系统中的每个进程,都有一个位置的ID,这就是pid,而且每次启 ...

  6. 分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较

    Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成.不过,略有遗憾的是,据说在淘宝内部,dub ...

  7. C#中用OLEDB操作EXCEL时,单元格内容长度超过255被截断

    C#中Microsoft.ACE.OLEDB.12.0 驱动读取excel,会读取前8行来判定每列的数据类型,假如没有超过255个字符,那么会被设置为nvarchar(255),从第9行开始,超过25 ...

  8. WPF-利用Blend写的平面控制闸门开关动画

    原文:WPF-利用Blend写的平面控制闸门开关动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/de ...

  9. 2.RapidIO串行物理层的包与控制符号

    转自https://www.cnblogs.com/liujinggang/p/9932150.html 一.RapidIO串行物理层背景介绍 上篇博文提到RapidIO的物理层支持串行物理层与并行物 ...

  10. 关于树莓派HDMI转VGA线接显示器黑屏

    经过数种折腾,找到了解决方法,在SD卡内有个config.txt文件,在其中找到“#hdmi_safe=1”,把#消除掉,变更后成为 # uncomment if you get no picture ...