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. 从Scratch到Python:会动的小猫

    大部分人提起儿童编程,就会想到Scratch,然而当儿童升入中学,学习什么语言比较合适呢?我认为,Python是未来的方向,为此我将会把一些经典的Scratch案例用Python重新实现,抛砖引玉,希 ...

  2. 2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)

    A Drawing Borders 很多构造方法,下图可能是最简单的了 代码: #include<bits/stdc++.h> using namespace std; ; struct ...

  3. js对象跟数组多层嵌套,检测没有此数据就添加有则不添加以及超过限制条件删除操作

    例如你需要这样格式的数据: [{"name":"合肥市","arrey":[{"lat":"31.862323 ...

  4. springboot缓存注解——@CacheEvict

    @CacheEvict:缓存清除 可以通过key指定清除的数据 如果不写默认参数的值 allEntries = true (是否删除该缓存名中所有数据,默认为false) beforeInvocati ...

  5. Python函数分类及操作

    为什么使用函数? 答:函数的返回值可以确切知道整个函数执行的结果   函数的定义:1.数学意义的函数:两个变量:自变量x和因变量y,二者的关系                      2.Pytho ...

  6. 重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    出现报错: Warning: World-writable config file '/etc/my.cnf' is ignored // 该文件权限过高ERROR 1045 (28000): Acc ...

  7. 关于a标签的用法总结

    onclick的事件被先执行 ,其次是href中定义的(页面跳转或者javascript) 同时存在两个定义的时候(onclick与href都定义了),如果想阻止href的动作,在onclick必须加 ...

  8. 网络爬虫&起点中文网完本榜500部小说

    # 网络爬虫爬取起点中文网完本榜小说500部# 四步,分步操作,不易出错# 所需要获取的数据:书名 .作者.网址.类型.主要介绍.作品信息 from urllib.request import * # ...

  9. linux bash array list

    #定义array ptpArray=()while read linedo #将文件读取内容放到array中,注意作为字符串放,否则空格会被分隔成行ptpArray+=("$line&quo ...

  10. MyBatis动态创建表

    转载请注明出处:https://www.cnblogs.com/Joanna-Yan/p/9187538.html 项目中业务需求的不同,有时候我们需要动态操作数据表(如:动态建表.操作表字段等).常 ...