红联Linux门户
Linux帮助

[修改]Shell里的测试条件

发布时间:2006-04-16 11:27:39来源:红联作者:cooc
转一篇台湾同仁写的文章,在他的基础上对shell里的测试条件进行归纳:



???件
在Bourne shell的?部命令?面有???件的?法test?if while用
test condition
或者
[ condition ]

?了?autoconf不要混淆,programmer比?喜?用test 不用中括?condition的方法。括?的用法?注意空格(这里容易出错哦)。 例如
?案???件
test -f /etc/file ?案是?一般?案不是其他特殊?案?
[ -e file ] ?案存在?
[ -d /etc/ ] 目?存在?
[ -s file ] ?案大小大於0?
[ -r file ] ?案可??
[ -b file ] 区块文件
[ -c file ] 字符文件
[ -f file ] 一般文件
[ -w file ] 文件可写吗
[ -x file ] 文件可执行吗
[ -k file ] 设定了限定位
[ -g file ] 设定了组位
[ -u file ] 设定了user id
[ -p file ] 管线

字串???件
[ "$string" ] string有?西就返回true
[ -n "$string" ] string有?西(non-zero)返回true
[ -z "$string" ] string??西(zero)返回true
[ "$s1" = "$s2" ] s1 等於 s2?返回true
[ "$s1" != "$s2" ] s1 不等於 s2?返回true

?值?件 小心有多?-喔
[ $num1 -eq $num2 ] num1相等 num2 ?true
[ $num1 -ne $num2 ] 不等 num2 ?true
[ $num1 -lt $num2 ] 小於 num2 ?true
[ $num1 -ge $num2 ] 大於等於 num2 ?true
[ $num1 -le $num2 ] 小于等于 num2 为true
[ $num1 -gt $num2 ] 小于 num2 为 true

多重?件
[ ! -f "testfile" -o ! -r "testfile" ]
[ test condition -o test condition ]
! 表示not
-a 表示and
-o 表示or

通常比?常用的又有portable的就是上面一些用法。 美?上??用中括?condition比?好看,很多人?了autoconf的?法portable起?, ?量用test的?法。??的?果?然放在$?中,0表示成功, 其他值表示失?。

在shell script中也有可能看到有人用
if [ "x$VAR" = "xvalue" ]; then .....

?作$VAR是否是空的??,尤其你如果先??是否?空字串, 再??是那?值要做什?,??就?作?次??划不?,用??作比???。

另外?跟perl字串??值??容易混淆,他跟perl?好相反,而且perl?有多-
perl?法
if ($str1 eq $str2)
if ($num1 == $num2)

最後有?大比?,?一起列出shell perl c的差??。(人老了?不住,我是??? ,以perl?基?eq是字,所以前後是string,==是符?所以前後是number, bourne shell是怪胎,?好?倒,eq?要加?-符?。==要少一?=)
C?法
if (!strcmp(string1, string2))
if (num1 == num2)
文章评论

共有 0 条评论