Chinaunix首页 | 论坛 | 博客
  • 博客访问: 446784
  • 博文数量: 26
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-28 11:38
文章分类

全部博文(26)

文章存档

2020年(2)

2015年(3)

2014年(16)

2013年(1)

2012年(4)

我的朋友

分类: LINUX

2014-12-02 23:12:15

test是目前为止与if使用的最频繁的命令。test有多种类型的检查和对比。一般的表达式有两种等价的形式:
test expression
或者更常用的是
[ expression ]
这里expression的值为true或者false。当表达式为true时,test返回1,当表达式为false时。test返回0.

文件表达式

以下表达式用来测试文件状态:
表达式
当表达式为真时
file1 -ef file2
file1 file2 有相同的inode编号 (两个文件名通过硬链接引用同一个文件).
file1 -nt file2
file1 file2
file1 -ot file2
file1 file2旧.
-b file
文件存在并且是块设备文件
-c file
文件存在并且是字符设备文件
-d file
文件存在并且文件类型是目录
-e file
文件存在
-f file
文件存在并且是常规文件
-g file
文件存在并且已经设置了group id
-G file
文件存在并且被有效的组id所拥有(file exists and is owned by the effective group ID
-k file
文件存在并且设置了粘滞位( file exists and has its “sticky bit” set
-L file
文件存在并且是符号链接
-O file
文件存在并且被有效的用户id所拥有(file exists and is owned by the effective user ID
-p file
文件存在并且是有名管道
-r file
文件存在并且可读(为有效用户设置了读权限)
-s file
文件存在并且文件长度不为0
-S file
文件存在并且是网络套接字
-t fd
fd是文件描述符,该描述符指向to/from终端。可以用来判定标准 输入/输出/错误 是否被重定向
-u file
文件存在并且设置了uid
-w file
文件存在并且可写(对有效用户开启了写权限)
-x file
文件存在并且可执行(对有效用户开启了 执行/搜索 权限)
举例如下:
if [ -e "$FILE" ]; then
对于FILE的这种写法可以确保即使$FILE的展开值为空,test表达式的参数也是存在的。

字符串表达式

以下表达式用来测试字符串:
表达式
当表达式为真
string
string值不为NULL
-n string
字符串长度大于0
-z string
字符串长度为0
string1 = string2
string1 == string2
string1string2相等,两种写法都可以,但是请优先选用==
string1 != string2
string1string2不相等
string1 > string2
string1 sorts after string2
string1 < string2
string1 sorts before string2.
当>和<在test中使用时必须引号括起来或者转义。因为有可能bash会把它解释为重定向字符

整形表达式

下面的表达式用来对整形做测试:
表达式
当表达式为真时
integer1 -eq integer2
integer1等于integer2
integer1 -ne integer2
integer1不等于integer2
integer1 -le integer2
integer1小于等于integer2
integer1 -lt integer2
integer1小于integer2
integer1 -ge integer2
integer1大于等于integer2
integer1 -gt integer2
integer1大于integer2
test的现代版本
字符串表达式如下:
[[ expression ]]

该版本支持所有的test表达式并且添加了一个重要功能
string1 =~ regex
当 string1 匹配扩展的正则表达式regex时,表达式值为真
举例如下:
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then



整形表达式如下:
(( expression ))
(( ))用来测试算数表达式,表达式值为非0值表达式值为true
举例如下:
if (( ((INT % 2)) == 0)) ; then








阅读(1709) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~