文章目录
此链接通往 Bash Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:
test 命令的作用:
判断某表达式是否满足需求!需要由测试机制来实现!
root@zhengzelin:~# type test
test is a shell builtin
内部命令!
help test 查看更多信息:
root@zhengzelin:~# help test
test: test [expr] 格式: test [ 表达式 ]
"Evaluate conditional expression."
# 评估条件表达式
"Exits with a status of 0 (true) or 1 (false) depending on the evaluation of EXPR. "
# 根据表达式的评估,以 0(真) 或 1(flase) 的状态退出。
"Expressions may be unary or binary."
# 表达式可以是一元或二进制。
"Unary expressions are often used to examine the status of a file."
# 一元表达式通常用于检查文件的状态。
"There are string operators and numeric comparison operators as well."
# 也有字符串运算符和数字比较运算符。
1、test 中的 文件测试运算符
File operators: # 文件运算符
文件状态:
-a FILE # 如果文件存在则为 true 。
-b FILE # 如果文件为 块设备文件 则返回 true !
-c FILE # 如果文件为 字符设备文件 则返回 true !
-d FILE # 如果为目录,则返回 true !
-e FILE # 如果文件存在则为 true 。
-f FILE # 如果文件存在并且是常规文件,则为true!(常规文件:非字符设备文件、非块设备文件)
链接文件:
-h FILE # 如果文件是符号链接,则为true。(硬链接文件)
-L FILE # 如果文件是符号链接,则为true。(软连接文件)
文件权限:
-r FILE # 如果你对这个文件有 读权限,则为 true。
-w FILE # 如果你对这个文件有 写权限,则为 true。
-x FILE # 如果你对这个文件有 执行权限,则为 true。
文件大小:
-s FILE # 如果这个文件存在,且不为空,则为 true。
用户和组 id:
-g FILE # 如果文件是 set-group-id 文件,则为 true。
-u FILE # 如果文件是 set-user-id 文件,则为 true。
-k FILE # 如果文件的“粘滞”位已设置,则为true 。
-S FILE # 如果文件是套接字,则为true。
-p FILE # 如果file是命名管道,则为true。
-t FD True if FD is opened on a terminal.
属主、属组:
-O FILE # 如果文件 有效的 归你所有,则为 true 。
-G FILE # 如果文件 有效的 归你所属的组 所有,则为 true 。
-N FILE # 如果文件自上次读取以来已被修改,则为true。
FILE1 -nt FILE2 # 如果 文件1 比 文件2 要新,则为 true 。
FILE1 -ot FILE2 # 如果 文件1 比 文件2 要旧,则为 true 。
FILE1 -ef FILE2 # 如果 文件1 是 文件2 的硬链接,则为 true 。
2、test 中的 字符串运算符:
String operators:
-z STRING # 如果 字符串 为空,则为 true 。
-n STRING # 如果 字符串 不为空,则为 true 。
STRING # 如果 字符串 不为空,则为 true 。( 不写 -n 代表的意思一样!)
STRING1 = STRING2
STRING1 != STRING2
STRING1 < STRING2 # 从字典上看,如果 string1 排在 string2 之前,则为 true 。
STRING1 > STRING2 # 从字典上看,如果 string1 排在 string2 之后,则为 true 。
# 千万记得格式哦 ,空格
3、test 中的 其他运算符:
Other operators:
shell 变量:
-o OPTION # 如果启用了 shell 选项 OPTION ,则为 true 。
-v VAR # 如果设置了 shell 变量 VAR,则为true
-R VAR # 如果设置了 shell 变量 VAR 并且是名称引用,则为True。
与或非:
EXPR1 -a EXPR2 # expr1 和 expr2 都为真,结果才为 true。
EXPR1 -o EXPR2 # expr1 和 expr2 只要一个为真,结果就为 true。
! EXPR # 如果 expr 为 flase,那么结果为 true 。
算数测试:
arg1 OP arg2 OP可以是:"-eq, -ne,-lt, -le, -gt, or -ge." 中的任意一个!
eg:①:使用 test 来测试字符串:
root@zhengzelin:~# a=abc
root@zhengzelin:~# b=def
root@zhengzelin:~# test $a = $b;echo $?
1
root@zhengzelin:~# b=abc
root@zhengzelin:~# test $a = $b;echo $?
0
注意哦,一定要用 ; 而不能使用 | !
eg:②:使用 test 进行算数测试:
root@zhengzelin:~# a=1
root@zhengzelin:~# b=2
root@zhengzelin:~# test $a -ne $b;echo $?
0
root@zhengzelin:~# if [ $a -ne $b ];then echo "yse";fi
yes
★ 与 test 完全等价的符号: [ ]:
root@zhengzelin:~# a=abc
root@zhengzelin:~# b=de
root@zhengzelin:~# test $a = $b
root@zhengzelin:~# echo $?
1
root@zhengzelin:~# [ $a = $b ]
root@zhengzelin:~# echo $?
1