Linux bash脚本编程学习基础,条件表达式

版权声明:郭振银学习记录 https://blog.csdn.net/karelcn/article/details/82810901

条件测试表达式

  [ expression ]  括号两端必须要有空格,一般测试法
  [[ expression ]] 括号两端必须要有空格,复合测试法
  test expression 内置命令测试法
  COMMAND 直接将bash命令当做条件,不加任何修饰

说明

内置命令test expression 和 [ expression ]

 	1. 操作符合操作数必须分开,保持空格
 	2. test 不接受任何选项
 	3. 条件测试类型 可结合的操作符
 			! expr	结果取反;逻辑非,单目操作
 			(expr)	提升优先级
 			expr1 -a expr2	逻辑与
 			expr1 -o expr2	逻辑或

复合[[ expression ]]

1. 使用复合表达式在使用 == 、!=操作符时,右侧可以是一个模式,如果要匹配这个模式本身,使用引号引起来即可
2. "=~":判断左边的字符串能否被右边的模式所匹配,通常用于` expression `
3.  (expr)	提升优先级
	! expr	结果取反;逻辑非
 	expr1 && expr2	逻辑与
 	expr1 || expr2	逻辑或

条件测试类型:

1.整数测试

int1 -eq int2	测试两个数相等
int1 -ne int2	测试两个数不等
int1 -gt int2	测试int1 大于 int2
int1 -lt int2	测试int1 小于 int2
int1 -ge int2	测试int1 大于等于  int2
int1 -le int2 	测试int1 小于等于 int2

2.字符测试

-v string	设置的shell变量名(已经赋值),为真;否则为假
-z string  字符串string为空为零,则为真,否则为假
-n string / string	字符串string为不空非零,则为真,否则为假
string1 == string2 	字符串string1与string2相同为真,否则为假
string1 = string2	字符串string1与string2相同为真,否则为假(由test内建命令 使用)
string1 != string2 	字符串string1与string2不同为真,否则为假
string1 < string2	字符串string1按字典排序在string2之前为真,否则为假
string1 > string2	字符串string1按字典排序在string2之后为真,否则为假
【[[ expression ]] 特有】
string1 =~ string2 	字符串string1与string2(为扩展的正则表达式);匹配为真返回值为0,否则为假,返回值为1;正则表达式语法不对,返回值为2
特别注意:== 和 != 使用时注意两边空格,字符串有空格,使用双引号括起来

3.文件测试

file 为文件或者目录完整路径
**文件属性测试**
-e/-a file	file文件存在为真,否则为假
-f file	file文件存在且为常规(普通)文件为真,否则为假
-d file	file文件存在且为目录为真,否则为假
-L/-h file	file文件存在且为符号链接为真,否则为假
-p file	file文件存在且为命令管道(FIFO)为真,否则为假
-b file	file文件存在且为块设备特殊文件为真,否则为假
-c file	file文件存在且为字符设备特殊文件为真,否则为假
-g file	file 文件存在并且设置了组ID为真,否则为假
-u file	file文件存在并且设置了用户ID为真,否则为假
-s file	file文件存在且文件大小大于零为真,否则为假
-S file	file文件存在且为套接字为真,否则为假
**文件权限测试**
-r file	file文件存在可读为真,否则为假
-w file	file文件存在可写为真,否则为假
-x file	file文件存在可执行为真,否则为假
**文件对比**
file1 -ef file2	文件file1与file2引用的设备和节点编号相同为真,否则为假
file1 -nt file2	文件file1比file2新(根据修改日期),或者file1存在,file2不存在,则为真;否则为假
file1 -ot file2	文件file1比file2旧,或者file1不存在,file2存在,则为真;否则为假

4.组合条件测试

当有多个测试条件时,我们可以把这些测试条件组合起来使用:
-a:and
-o:or
!:非,这是单目操作
`例如:if [ $x -gt 90  -o $ -lt 100 ] ;then 此为多个条件测试` 
当是bash命令之间组合测试时,则:
&&:逻辑与    
		第一个条件为假(true), 第二个条件不用在判断
        第一个条件为真(false),第二个条件必须得判断
||:逻辑或
		第一个条件为真(true) ,第二个条件不用再判断
		第一个条件为假(false),第二个条件必须判断
!:逻辑非	
`例如:if grep -q "rm" fn.sh && [ $a -lt 100 ];then` 此为多个bash命令测试

猜你喜欢

转载自blog.csdn.net/karelcn/article/details/82810901