1、使用if_then语句
if command

then

commands

fi

先运行if后面的命令,如果命令的退出状态是0(成功执行命令),就将执行then后面,fi前面的所有命令。否则就跳到fi后面继续执行。

2、if-then-else语句
if command

then

commands

else

commands

fi

3、嵌套if语句
if command1

then

commands

elif command2

then

commands

elif command3

then

commands

fi

4、test命令(方括号[   ]为同义词)
用于提供对条件的判断

if test condition   也可以不用test condition,而使用 [ conditon ]         ([ , ] 的前后必须有空格)

then

commands

fi

condition有三种:

(1)数值比较: –eq, –ne,              –ge,-gt,            -le, lt
       但是要注意:test命令无法处理存储在变量中的浮点值。

使用bash计算器bc时,只是欺骗了shell把浮点值作为字符串值存储于一个变量中。如果只是先使用echo语句显示结果,这种方法很好。但是在面向数值的函数(如数值测试条件)中不起作用。

底线是不能在test中使用非整数变量

(2)字符串比较:=,!=,<,>,-n(检测字符串长度是否大于0),-z(检测字符串长度是否等于0)
字符串相等:测试比较将所有标点符号和大写都考虑在内

字符串顺序:要注意两点:

1)’>’,’<’一定要用’\’转义,否则shell会将它们当做重定向符号,将字符串值看做文件名

2)大于和小于的顺序与在sort命令中的顺序不同。

在test中,同一个字母,大写字母>小写字母

在sort中,相反。

字符串大小:评估一个变量是否包含数据时,使用-n和-z比较方便

对空变量和未初始化的变量检测出的长度也为0

(3)文件比较
文件比较是shell脚本中最强大和最常用的一类比较。
test可以测试文件状态和路径。(使用的非常频繁!)

-d file: 检查file是否存在并且是一个目录

-e file: 检查file是否存在

-f file: 检查file是否存在并且是一个文件

-r file: 检查file是否存在并且可读

-s file: 检查file是否存在并且不为空

-w file: 检查file是否存在并且可写

-x file: 检查file是否存在并且可执行

-O file: 检查file是否存在并且被当前用户拥有

-G file:检查file是否存在并且默认组是否为当前用户组

file1 –nt file2: 检查file1是否比file2新

file1 –ot file2: 检查file1是否比file2旧

5、复合条件查询
[ condition1 ] && [ condition2 ]

[ condition1 ] || [ condition2 ]

6、if-then的高级特征
(1)使用双圆括号表示数学表达式

(( expression ))

expression包括除了标准数学操作符外的其他操作符如下:

++, –, !, ~, **, <<, >>, &, |, &&, ||

(2)使用双方括号表示高级字符串处理函数

[[ expression ]]

提供了除test命令中的标志字符串比较以外的模式匹配功能

在模式匹配中,可以定义与字符串值相匹配的正则表达式

7、case 命令
可以使用case命令,而不是编写所有的elif语句来继续检查相同的变量值。

case命令以列表导向检查单个变量的多个值

case variable in

pattern1 | pattern2) commands1;;

pattern3) commands2;;

*) default commands;;

esac

shell_base的更多相关文章

随机推荐

  1. Python玩转Arduino——简单介绍

    关于Python语言的介绍安装请参考廖雪峰的Python教程 Python是一门解释型语言,虽然不能够像c语言一样编译上传到Arduino--什么你说MicroPython,我们再说Arduino呢- ...

  2. 悲观并发 乐观并发 Entity Framework Core中的并发处理

    悲观并发策略 A用户发起一个请求   开启了事务 查询到了某一条数据 进行修改     在A提交事务之前 其他人都不能对这条数据进行修改 这种策略最常见的一个问题就是死锁  比如A修改X记录,B修改Y ...

  3. leecode第二百三十八题(除自身以外数组的乘积)

    class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int len= ...

  4. 如何利用redis来进行分布式集群系统的限流设计

    在很多高并发请求的情况下,我们经常需要对系统进行限流,而且需要对应用集群进行全局的限流,那么我们如何类实现呢. 我们可以利用redis的缓存来进行实现,并且结合mysql数据库一起,先来看一个流程图. ...

  5. php实现ZIP压缩文件解压缩

    测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...

  6. 树莓派 连接 JY901(MPU9250) python 代码

    先说BUG,最近要做项目需要树莓派和陀螺仪,资金充足的话肯定是买一个硬件卡尔曼滤波的传感器类似JY901模块,资金不足的就买MPU6050. 网上关于MPU6050在树莓派上的代码还能用,关于JY90 ...

  7. java 使用GET请求编码问题解决

    java GET请求解决编码的有效代码前端: encodeURI(encodeURI("你好") 后端代码: String name = request.getParameter( ...

  8. 关于node

    nodejs npm常用命令 npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包. ...

  9. 软件工程wc项目,基于py

    ###WC项目文件链接:https://github.com/ILTHEW/wc.git 个人项目:WC 实践是理论的基础和验证标准,希望读者贯彻"做中学"的思想,动手实现下面的项 ...

  10. centos升级openssl方法及步骤

    1.下载要升级到的openssl包https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz 2.升级opens ...