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. vs2013编译obs源码

    obs源码下载 一种是在GitHub上下载最新的代码 git clone --recursive https://github.com/jp9000/obs-studio.git --recursiv ...

  2. 【python】 迭代器、生成器、列表推导式

    一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==& ...

  3. SVN导出差异版本更新的文件列表

    对于在服务器上没有使用版本控制的运维人员来说,每次SVN修改的文件都需要查看更改日志,一个个查找出来再更新到服务器,过程实在是痛苦 那么有没有一种方法跑个命令比对一下版本就哗啦啦的把修改好的文件复制出 ...

  4. Python中常见的正则表达式符号

    ?  匹配零次或一次前面的分组 *   匹配零次或多次前面的分组 +  匹配一次或多次前面的分组 {n} 匹配n次前面的分组 {n,} 匹配n次或更多次前面的分组 {,m} 匹配零次到m次前面的分组 ...

  5. 在Rancher 1.6上部署Traefik负载均衡器

    一.给Traefik主机打标签 01-给即将部署Traefik的主机节点打上标签.jpg 02-主机打完traefik_lb标签后的状态.jpg 二.在Rancher应用商店中部署Traefik 应用 ...

  6. oracle 游标分析与理解(基础)

    --------------坚持写一点 慢慢成长 希望对大家有所帮助(小白的理解)  也是自己学习后的理解(只是一小部分,需要更深沉的还需日后成长) 接下来就是我们的重点 --游标 提供了一种对从表中 ...

  7. sublime text3使用

    设置tab键为若干空格 { "tab_size": 4, "translate_tabs_to_spaces": true }

  8. Active Record Query Interface 数据查询接口(界面) 看到第8节。

    http://guides.rubyonrails.org/active_record_querying.html ✅How to find records using a variety of me ...

  9. HBuild 连接安卓手机

    设备:一部电脑.一部安卓手机.一条数据线 1.  数据线连接电脑和安卓手机: 2.  安卓手机-->  设置 -- > 开发者选项 --> 点进去,找到USB调试并且打开,例:    ...

  10. C语言函数声明什么时候可以省略,什么时候不能省?

    在学习C语言函数的时候,老师总会告诉我们函数要写声明,然后再定义.这是个稳健的做法.等我自己学习了其他高级语言以后,回头再来写C,突然就觉得函数要写声明有点麻烦.无意间发现有一次函数没写声明居然编译( ...