shell基础--条件测试

一。条件测试

判断某需求是否满足,需要由测试机制来实现

专用的测试表达式需要由测试命令辅助完成测试过程
评估布尔声明,以便用在条件性执行中
• 若真,则返回0
• 若假,则返回1
测试命令:

• test EXPRESSION
• [ EXPRESSION ] • [[ EXPRESSION ]]

中括号可以替代test

[[ ]] 双中括号支持扩展正则表达式但是必须用=~
在双中括号中写变量—尽量用双引号引起来

注意:EXPRESSION前后必须有空白字符

1. bash数值测试

有变量尽量使用双引号
**数值测试:**比较的是数字

-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于

在这里插入图片描述
在这里插入图片描述

2. bash的字符串测试

此表达式一般用于[[ ]]中;扩展的正则表达式
在双中括号中写变量—尽量用双引号引起来

字符串测试:

= 是否等于
> ascii码是否大于ascii码 < 是否小于
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATTERN所匹配
 注意: 此表达式一般用于[[ ]]中;扩展的正则表达式
 -z "STRING“ 字符串是否为空,空为真,不空为假
 -n "STRING“ 字符串是否不空,不空为真,空为假

注意:用于字符串比较时的用到的操作数都应该使用引号

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

\是转义
在这里插入图片描述
在这里插入图片描述
用正则表达式,表示合法的地址
在这里插入图片描述
在这里插入图片描述

在用test测试时“必须有位置锚定–有头有尾”在这里插入图片描述

3. Bash的文件测试

存在性测试

-a FILE:同 -e
-e FILE: 文件存在性测试,存在为真,否则为假

存在性及类别测试

-b FILE:是否存在且为块设备文件
-c FILE:是否存在且为字符设备文件
-d FILE:是否存在且为目录文件
-f FILE:是否存在且为普通文件
-h FILE 或 -L FILE:存在且为符号链接文件
-p FILE:是否存在且为命名管道文件
-S FILE:是否存在且为套接字文件

在这里插入图片描述

4. Bash的文件权限测试

文件权限测试:
-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行
文件特殊权限测试:
-u FILE:是否存在且拥有suid权限
-g FILE:是否存在且拥有sgid权限
-k FILE:是否存在且拥有sticky权限

5. Bash的文件属性测试

文件大小测试:
-s FILE: 是否存在且非空
文件是否打开:
-t fd: fd 文件描述符是否在某终端已经打开
-N FILE:文件自从上一次被读取之后是否被修改过
-O FILE:当前有效用户是否为文件属主
-G FILE:当前有效用户是否为文件属组
双目测试:
FILE1 -ef FILE2: FILE1是否是FILE2的硬链接
FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)
FILE1 -ot FILE2: FILE1是否旧于FILE2

6. Bash的组合测试条件

第一种方式:-a并且,-o或者 , !非
EXPRESSION1 -a EXPRESSION2 并且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSION
必须使用测试命令进行,[[ ]] 不支持
第二种方式:
COMMAND1 && COMMAND2 并且,短路与,代表条件性的AND THEN
COMMAND1 || COMMAND2 或者,短路或,代表条件性的OR ELSE
! COMMAND 如:[ -f “$FILE” ] && [[ “$FILE”=~ .*\.sh$ ]]

例如:
条件性的执行操作符

grep -q no_such_user /etc/passwd || echo 'No such user' 
No such user
ping -c1 -W2 station1 &> /dev/null \ > && echo "station1 is up" \ > || (echo 'station1 is unreachable'; exit 1) 
station1 is up

Bash的组合测试条件

test "$A" = "$B" && echo "Strings are equal" 
test “$A”-eq “$B” && echo "Integers are equal“
[ "$A" = "$B" ] && echo "Strings are equal" 
[ "$A" -eq "$B" ] && echo "Integers are equal“
[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
[ -z “$HOSTNAME” -o $HOSTNAME "=="localhost.localdomain" ] \
&& hostname www.magedu.com

短路与和短路或

千万不要尝试哟
俄罗斯轮盘赌

[ $RANDOM%6 –eq 0 ] && rm –rf /* || echo “click”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值