文章目录
1. test表达式
test测试表达式,利用test命令进行条件测试表达式,test命令与测试表达式之间至少有一个空格
1.1 [测试表达式]
通过[]中括号进行条件测试表达式,[]中括号边界与测试表达式之间至少有一个空格
1.2 [[测试表达式]]
通过[[]]双括号进行条件测试表达式,[[]]双括号与测试表达式之间至少有一个空格
1.3 ((测试表达式))
通过(())双小括号进行条件测试表达式,(())双小括号两端不需要空格,常用于整数对比
1.4 $[] 整数运算
1.5$()
命令替换 shell会执行括号的cmd,然后将结果作为变量进行替换,替换只能替换标准输出,错误输出不能替换
1.6 ${}
shell中变量的原型,用于限定变量名称的范围,并且支持通配符
1.7 [] 条件测试
1.8 () 子shell中执行
1.9 {} 在当前shell执行
#()是重新开一个子shell然后执行,而{}则是在当前shell里执行
#()最后一个命令可以不用分号,{}最后一个命令要用分号。
#()里第一个命令和左边括号不必有空格,而{}第一个命令和左括号之间必须有一个空格
[root@Centos-root473791 ~]# (ls)
11.sh 2.sh 99.sh abc.sh awkscript caseD.sh forD.sh install.log.syslog readme.sh
1.sh 3.sh aaaa anaconda-ks.cfg awk.txt forD2.sh install.log mainD.sh whileD.sh
[root@Centos-root473791 ~]# {ls;}
-bash: syntax error near unexpected token `}'
[root@Centos-root473791 ~]# { ls;} #()里第一个命令和左边括号不必有空格,而{}第一个命令和左括号之间必须有一个空格
11.sh 2.sh 99.sh abc.sh awkscript caseD.sh forD.sh install.log.syslog readme.sh
1.sh 3.sh aaaa anaconda-ks.cfg awk.txt forD2.sh install.log mainD.sh whileD.sh
[root@Centos-root473791 ~]#
()和{}里的某个命令的重定向会影响该命令,而{}里的会影响内外的所有命令
2.文件表达式
linux 下表达式文件表达式
-e filename 如果 filename文件不管是文件还是目录只要存在,则为真
-d filename 如果 filename文件存在且为目录,则为真
-f filename 如果 filename为常规文件且存在,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename文件存在且有可读权限,则为真
-w filename 如果 filename文件存在且有可写权限,则为真
-x filename 如果 filename文件存在且有可执行权限,则为真
-s filename 如果文件文件且文件大小不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,根据文件的修改之间计算,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,根据文件的修改之间计算,则为真。
3. 整数变量表达式
在[]和test中使用 在[[]]和(())中使用 说明
-eq ==或= 等于,全拼为equal
-nq != 不等于,全拼为not equal
-gt > 大于,全拼为greater than
-ge >= 大于等于 greater equal
-lt < 小于,全拼为less than
-le <= 小于等于,全拼为 less equal
C语言风格比较
实列:
3. 1 字符串变量表达式
if [ $a = $b ] 如果string1等于string2,则为真 ,字符串允许使用赋值号做等号
if [ $string1 != $string2 ] 如果string1不等于string2,则为真
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空,则为真
if [ $sting ] 如果string 非空,返回0 (和-n类似)
3.2 字符串比较表达式
参数 功能
-z s1 如果字符串s1的长度为0,则测试条件为真
-n s1 如果字符串s1的长度大于0,则测试条件为真
sl 如果字符串s1不是空字符串,则测试条件为真
=或== s1=s2 如果s1等于s2,则测试条件为真,"="前后应有空格
!= s1!=s2 如果s1不等于s2,则测试条件为真
< s1 如果按照字典顺序s1在s2之前,则测试条件为真
> s1>s2 如果按自定义顺序s1在s2之后,则测试条件为真
注意
对于字符串的比较,一定要将字符串加比引号后再比较,如[ -n “$string”]
=与!=可用于判断两个字符串是否相同
4. 逻辑表达式
在[]或test中 在[[]]或(())中 说明
-a && and与,两者都为真则为真
-o || or或,一个为真则为真
! ! not非,相反则为真