日期:2014-05-16  浏览次数:20706 次

一个SHELL条件控制的问题
if test ! -s "$1"
then
 echo $1 does not exist or is empty.
fi
中的-s有什么用?
还有
if [$# -lt 2 -o ! -e $1]
then
  exit
fi
中的-o和-e 有什么用?

------解决方案--------------------
嘿嘿,我刚学完,总结了一下,给你参考一下哈
 
1.测试文件状态
Test一般有两种格式:
test condition 或 [ condition ] (使用方括号时,要注意在条件两边加上空格)。
文件状态测试:
- e 文件存在(同- a)
- d 目录- s 文件长度大于0、非空
- f 正规文件- w 可写
- L 符号连接- u 文件有s u i d位设置
- r 可读- x 可执行
- s 文件长度大于0、非空
- w 可写
- u 文件有s u i d位设置
- x 可执行
- c 文件为字符特殊文件为真
-b 文件为块设备文件为真
-p 文件是个管道
-t 当文件描述符(默认为1)指定的设备为终端时为真
-h 文件是个符号链接
-S 文件是个socket

f1 - nt f2 文件1比文件2新
f1 - ot f2 f1比f2老
f1 - ef f2 f1和f2都硬连接到同一个文件
注意:测试结果是0表示成功,其他为失败。(echo $ ?查看成功与否)
2.测试时使用逻辑操作符
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
3. 字符串测试
= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。
4. 测试数值
测试数值可以使用许多操作符,一般格式如下:
"number" numeric operator "number"
或者
["number" numeric operator "number"]
numeric operator可为:
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。