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 3】 字符串方法操作汇总

    基础数据类型:str 1.1  字符串大小写转换 所有字母大写 : string.upper() 所有字母小写 : string. lower() 第一个单词的第一个字母大写,其他字母小写 :  st ...

  2. Spring定时任务@Scheduled注解使用方式

    1.开篇 spring的@Scheduled定时任务相信大家都是十分熟悉.最近在使用过程中发现了一些问题,写篇文章,和大家分享一下.结论在最后,不想看冗长过程的小伙伴可以直接拉到最后看结论. 2.简单 ...

  3. Demo整合

    1.图片上传:  https://github.com/842549829/WebUploader 2.百度编辑器: https://github.com/842549829/Ueditor 3.安卓 ...

  4. DAY 17常用模块

    一.时间模块:time 1.时间戳:time.time() # 可以作为数据的唯一标识 print(time.time) # 1554878849.8452318 2.延迟线程的运行:time.sle ...

  5. 雷林鹏分享:YAF路由问题

    这2天休年假,在家宅着学习研究了YAF框架,用YAF做过APP接口的项目,但是没有用来做过WEB方面的应用.趁着这2天在家想把博客用YAF进行一下改版,目的也想进一步学习一下YAF. 在这过程中遇到不 ...

  6. Spring Boot 配置加载顺序详解

    使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 ...

  7. 第一次java程序设计作业

    通过JAVA语言的学习,使我对计算机语言有了更加深入的认识和理解.知道了许多JAVA语言与其他语言的区别和特性,及其在我们生活中所发挥的重要作用.最后用一句话表明在学习JAVA语言过程中的感受,那就是 ...

  8. 【Redis】yum安装redis

    1.yum直接安装就可以 yum install redis 2.Redis开启远程登录连接 redis默认只能localhost访问 .配置防火墙 开放端口6379 .在redis的配置文件/etc ...

  9. Java语言中的奇淫技巧

    variable length parameter list(可变长度参数列表) 很久之前了解过有这么一种写法,但转眼即忘.今天在公司项目的代码里看到,有点小惊讶,写这代码的同事还是有点水平的...

  10. Linux基础命令ls

    目录处理命令:ls -a 显示所有文件,包括隐藏文件 --all -l h  详细信息显示  --long --human -d 查看目录属性  - -i 查看文件唯一编号 -表示文件 d表示目录 l ...