Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313612
  • 博文数量: 84
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 16:46
文章分类

全部博文(84)

文章存档

2017年(2)

2016年(4)

2015年(78)

我的朋友

分类: LINUX

2015-06-11 15:51:42

复习一下命令执行的判断依据:&& ||
  1. [root@RHEL6 ~]# ls /tmp/aaa && echo "exist" || echo "not exist"  //如果ls /tmp/aaa 命令的回传码为0,则执行echo "exist",回传码为非0,则执行echo "exist"
  2. ls: cannot access /tmp/aaa: No such file or directory  //标准的错误输出
  3. not exist                                              //命令执行结果
  4. [root@RHEL6 ~]# ls /tmp/aaa >/dev/null 2>&1 && echo "exist" || echo "not exist"   //呈上,无论命令ls /tmp/aaa执行的成功与否,屏幕上不显示标准输出和标准错误输出,都输出到/dev/null这个文件中
  5. not exist                                              //命令执行结果
  6. [root@RHEL6 ~]ls /tmp/aaa || mkdir /tmp/aaa
test这个命令可以作为当我们要检测系统上某些文件或者是相关的属性时使用
  test - check file types and compare values


检查/tmp/aaa是否存在
  1. [root@RHEL6 ~]# test -/tmp/aaa  //不会显示任何输出信息
  2. [root@RHEL6 ~]# echo $?           //但会有$?的输出,使用echo $?查看
  3. 1                                 //1表示标准输出
  4. [root@RHEL6 ~]# ls /tmp/aaa 
  5. ls: cannot access /tmp/aaa: No such file or directory
  6. [root@RHEL6 ~]# echo $? 
  7. 2
  8. [root@RHEL6 ~]#
执行结果并不会显示任何输出信息,但最后我们可以通过$?或&&及||来显示这个结果内,例如下面的例子
  1. [root@RHEL6 ~]# test -e /tmp/aaa && echo "exist" || echo "Not exist"
  2. Not exist

test命令主要参数
测试的标志 代表意义
根据个文件名的“文件类型”判断:如test -e filename表示存在否
-e 该文件名是否存在(常用)
-f 该文件名是否存在且为文件(file)(常用)
-d 该文件名是否存在且为目录(directory)(常用)
-b 该文件名是否存在且为一个block device设备
-c 该文件名是否存在且为一个character device设备
-S 该文件名是否存在且为一个Socket文件
-p 该文件名是否存在且为一个FIFO(pipe)文件
-L 该文件名是否存在且为一个连接文件
根据文件的权限检测:如test -r filename表示可读否(但root权限常有例外)
-r 检测该文件名是否存在且具有“可读”权限
-w 检测该文件名是否存在且具有“可写”权限
-x 检测该文件名是否存在且具有“可执行”权限
-u 检测该文件名是否存在且具有“SUID”属性
-g 检测该文件名是否存在且具有“SGID”属性
-k 检测该文件名是否存在且具有“Sticky bit”属性
-s 检测该文件名是否存在且具有“非空白文件”
两个文件之间的比较,如:test file1 -nt file2
-nt (newer than)判断file1是否比file2新
-ot (older than)判断file1是否比file2旧
-ef 判断file1与file2是否为同一文件,可用在判断hard link的判定上。主要意义在于判定两个文件是否均指向同一个inode。
两个整数之间的判定,例如test n1 eq n2
-eq 两数值相等(equal)
-ne 两数值不等(not equal)
-gt n1大于n2(greater than)
-lt n1小于n2(less than)
-ge n1大于等于n2(greater than or equal)
-le n1小于等于n2(less than or equal)
判断字符串的数据
test -z string 判定字符串是否为0,若string为空字符串,则为true
test -n string 判定字符串是否为非0,若string为空字符串,则为false,注:-n也可省略
test str1=str2 判定str1是否等于str2,若相等,则回传true
test str1!=str2 判定str1是否不等于str2,若相等,则回传false
多重条件判定,例如:test -r filename -a -xfilename
-a 两个条件同时成立!例如test -r file -a -x file,则file同时具有r与x权限时,才回传true
-o 任何一个条件成立!例如test -r file -o -x file,则file具有r或x权限时,才回传true
反向状态,如test ! -x file,当file不具有x是,回传true


通常用 [ ] 来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 
[ -f somefile ] :判断是否是一个文件 
[ -x /bin/ls ] :判断/bin/ls是否存在并有可执行权限 
[ -n $var ] :判断$var变量是否有值 
[ $a = $b ] :判断$a和$b是否相等 


test命令用法: 
1)判断表达式 
if test (表达式为真) 
if test !表达式为假 
test 表达式1 –a 表达式2 两个表达式都为真 
test 表达式1 –o 表达式2 两个表达式有一个为真 

2)判断字符串 
test –n 字符串 字符串的长度非零 
test –z 字符串 字符串的长度为零 
test 字符串1=字符串2 字符串相等 
test 字符串1!=字符串2 字符串不等 

3)判断整数 
test 整数1 –eq 整数2 整数相等 
test 整数1 –ge 整数2 整数1大于等于整数2 
test 整数1 –gt 整数2 整数1大于整数2 
test 整数1 –le 整数2 整数1小于等于整数2 
test 整数1 –lt 整数2 整数1小于整数2 
test 整数1 –ne 整数2 整数1不等于整数2 

4)判断文件 
test File1 –ef File2 两个文件具有同样的设备号和i结点号 
test File1 –nt File2 文件1比文件2 新 
test File1 –ot File2 文件1比文件2 旧 
test –b File 文件存在并且是块设备文件 
test –c File 文件存在并且是字符设备文件 
test –d File 文件存在并且是目录 
test –e File 文件存在 
test –f File 文件存在并且是正规文件 
test –g File 文件存在并且是设置了组ID 
test –G File 文件存在并且属于有效组ID 
test –h File 文件存在并且是一个符号链接(同-L) 
test –k File 文件存在并且设置了sticky位 
test –b File 文件存在并且是块设备文件 
test –L File 文件存在并且是一个符号链接(同-h) 
test –o File 文件存在并且属于有效用户ID 
test –p File 文件存在并且是一个命名管道 
test –r File 文件存在并且可读 
test –s File 文件存在并且是一个套接字 
test –t FD 文件描述符是在一个终端打开的转载请注明文章来 






阅读(2282) | 评论(0) | 转发(0) |
0

上一篇:Linux文件类型分类

下一篇:scp命令

给主人留下些什么吧!~~