shell表达式

shell条件表达式

条件表达式介绍

条件表达式中,我们非常的常用,可以说,任何编程语言,都离不开条件表达式,但是每种编程语言的写法都不太一样,在shell中,有一种独特的写法

[ 条件 ]		# 不支持>< 支持 -eq -le -ne
[[ 条件 ]]	# 支持>< -eq -le -ne
test 条件		# 都支持 命令行使用test

条件表达式选项

判断普通文件 -f (file)

# -f :判断文件是否存在

# 命令行:
[root@m01 ~]# test -f /tmp/pid.txt 
[root@m01 ~]# echo $?
0

# 脚本:
[root@m01 ~]# vim test.sh 
#!/bin/bash
# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__
[ -f /tmp/pid.txt ] && echo '存在' || echo '不存在'

[root@m01 ~]# sh test.sh 
存在

判断目录 -d (directory)

# -d :判断目录是否存在

# 命令行:
[root@m01 ~]# test -f /tmp
[root@m01 ~]# echo $?
0

# 脚本:
[root@m01 ~]# vim test.sh 
#!/bin/bash
# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__
[ -d /tmp ] && echo '存在' || echo '不存在'

[root@m01 ~]# sh test.sh 
存在

判断文件 -e (exists)

# -e:判断文件或目录是否存在

# 命令行:
[root@m01 ~]# test -e /tmp/pid.txt 
[root@m01 ~]# echo $?
0

# 脚本:
[root@m01 ~]# vim test.sh 
#!/bin/bash
# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__
[ -e /tmp/pid.txt ] && echo '存在' || echo '不存在'

[root@m01 ~]# sh test.sh 
存在

判断文件有没有读取权限 -r read

# -e 判断文件是否有读取权限

#[root@m01 ~]# vim test.sh 

#!/bin/bash

# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__

[ -r /tmp/pid.txt ] && echo '可读' || echo '不可读'

[root@m01 ~]# sh test.sh 
可读

判断文件是否有写入权限 -w (write)

# -w :判断文件是否有写入权限

# 命令行:
[root@m01 ~]# test -w /tmp/pid.txt 
[root@m01 ~]# echo $?
0

# 脚本:
[root@m01 ~]# vim test.sh 
#!/bin/bash
# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__
[ -w /tmp/pid.txt ] && echo '存在' || echo '不存在'

[root@m01 ~]# sh test.sh 
存在

判断文件是否有执行权限 -x execute

# -x :判断文件是否有执行权限

# 命令行:
[root@m01 ~]# test -x /tmp/pid.txt 
[root@m01 ~]# echo $?
0

# 脚本:
[root@m01 ~]# vim test.sh 
#!/bin/bash
# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__
[ -x /tmp/pid.txt ] && echo '存在' || echo '不存在'

[root@m01 ~]# sh test.sh 
存在

判断文件是否有内容 -s (size)

# -s :判断文件是否存在内容

# 命令行:
[root@m01 ~]# test -s /tmp/pid.txt 
[root@m01 ~]# echo $?
0

# 脚本:
[root@m01 ~]# vim test.sh 
#!/bin/bash
# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__
[ -s /tmp/pid.txt ] && echo '存在' || echo '不存在'

[root@m01 ~]# sh test.sh 
存在

判断文件是否是一个软链接 -L (link)

# -l :判断文件是否是软链接

# 命令行:
[root@m01 ~]# test -L /tmp
[root@m01 ~]# echo $?
0

# 脚本:
[root@m01 ~]# vim test.sh 
#!/bin/bash
# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__
[ -L /bin ] && echo '存在' || echo '不存在'

[root@m01 ~]# sh test.sh 
存在

对比两个文件的新旧 -nt (newar than)

[root@m01 ~]# sh test.sh 
pid不必2新
[root@m01 ~]# vim test.sh 

#!/bin/bash

# File Name: __test.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-19 14:42__

[ /tmp/pid.txt -nt /tmp/2.txt ] && echo 'pid比2新' || echo 'pid不必2新'

对比两个文件的修改时间 -ot (oldder than)

 # test /tmp/1.txt -ot /tmp/2.txt && echo '1.txt比2.txt老' || echo
'1.txt不比2.tt老'
1.txt不比2.txt老

 # echo 2 > /tmp/2.txt

字符串表达式

# -n 判断字符串是否为空,非空则成立

[root@m01 ~]# vim zm.sh

#!/bin/bash

# File Name: __zm.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-21 14:37__

abc='f'
[ -n "${abc}" ] && echo '字符串不为空' || echo '字符串为空'

[root@m01 ~]# sh zm.sh 
字符串不为空

# -z 判断字符串是否为空,空则成立

[root@m01 ~]# vim zm.sh

#!/bin/bash

# File Name: __zm.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-21 14:37__

abc='f'
[ -n "${abc}" ] && echo '字符串为空' || echo '字符串不为空'

[root@m01 ~]# sh zm.sh 
字符串为空

# 'str1' = 'str2' 字符串相等则成立

[root@m01 ~]# vim zm.sh

#!/bin/bash

# File Name: __zm.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-21 14:37__

abc='f'
abc1='u'
[ ${abc} = ${abc1} ] && echo '字符串相等' || echo '字符串不相等'

[root@m01 ~]# sh zm.sh 
字符串不相等

# 'str1' != 'str2' 字符串相等则成立

[root@m01 ~]# vim zm.sh

#!/bin/bash

# File Name: __zm.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-21 14:37__

abc='f'
abc1='u'
[ ${abc} != ${abc1} ] && echo '字符串不相等' || echo '字符串相等'

[root@m01 ~]# sh zm.sh 
字符串不相等
# 整数表达式
- eq : 等于
- ne : 不等于
- lt : 小于
- le : 小于等于
- gt : 大于
- ge : 大于等于

[[]]正则表达式

# = ~ : 成员运算

[root@m01 ~]# vim zm.sh

#!/bin/bash

# File Name: __zm.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-21 14:37__

name=wangcheng
[[ ${name} =~ [w] ]] && echo '包含' || echo '不包含'

[root@m01 ~]# sh zm.sh 
包含

# 贪婪匹配

[root@m01 ~]# vim zm.sh
^[[3~
#!/bin/bash

# File Name: __zm.sh__
# Version: __v1.1__ 
# Author: __WC__ 
# Mail: __2794552827@qq.com__ 
# Blog: __https://blog.driverzeng.com__ 
# DateTime: __2022-07-21 14:37__

name=wangcheng
[ ${name} =~ ^[j]+$ ]] && echo '包含' || echo '不包含'

[root@m01 ~]# sh zm.sh 
不包含

逻辑表达式

! 非
&& 与 -a [[]] && [[]] 
|| 或 -o [[]] !! [[]]
posted @ 2022-07-21 15:22  Gabydawei  阅读(48)  评论(0编辑  收藏  举报