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 [[]] !! [[]]