专用的测试表达式需要由测试命令辅助完成测试过程 评估布尔声明,以便用在条件性执行中 • 若真,则返回0 • 若假,则返回1 测试命令:
• test EXPRESSION • [ EXPRESSION ] • [[ EXPRESSION ]]中括号可以替代test
[[ ]] 双中括号支持扩展正则表达式但是必须用=~ 在双中括号中写变量—尽量用双引号引起来
注意:EXPRESSION前后必须有空白字符
有变量尽量使用双引号 **数值测试:**比较的是数字
-gt 是否大于 -ge 是否大于等于 -eq 是否等于 -ne 是否不等于 -lt 是否小于 -le 是否小于等于
此表达式一般用于[[ ]]中;扩展的正则表达式 在双中括号中写变量—尽量用双引号引起来
字符串测试:
= 是否等于 > ascii码是否大于ascii码 < 是否小于 != 是否不等于 =~ 左侧字符串是否能够被右侧的PATTERN所匹配 注意: 此表达式一般用于[[ ]]中;扩展的正则表达式 -z "STRING“ 字符串是否为空,空为真,不空为假 -n "STRING“ 字符串是否不空,不空为真,空为假注意:用于字符串比较时的用到的操作数都应该使用引号
\是转义 用正则表达式,表示合法的地址
在用test测试时“必须有位置锚定–有头有尾”
存在性测试
-a FILE:同 -e -e FILE: 文件存在性测试,存在为真,否则为假存在性及类别测试
-b FILE:是否存在且为块设备文件 -c FILE:是否存在且为字符设备文件 -d FILE:是否存在且为目录文件 -f FILE:是否存在且为普通文件 -h FILE 或 -L FILE:存在且为符号链接文件 -p FILE:是否存在且为命名管道文件 -S FILE:是否存在且为套接字文件文件权限测试: -r FILE:是否存在且可读 -w FILE: 是否存在且可写 -x FILE: 是否存在且可执行 文件特殊权限测试: -u FILE:是否存在且拥有suid权限 -g FILE:是否存在且拥有sgid权限 -k FILE:是否存在且拥有sticky权限
文件大小测试: -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
第一种方式:-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 upBash的组合测试条件
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”