一个shell脚本能够对任何可以从命令行上被调用的命令的退出码进行测试,其中也包括你自己编写的脚本程序。这也就是要在所有自己编写的脚本程序的结尾包括一条exit命令的重要原因。
在实际中,大多数脚本程序都广泛使用shell的布尔判断命令[或test,这二者在功能上差不多,只是为了增强可读性,当使用[命令时,我们还使用符号]来结尾。
下面以一个最简单的条件为例来介绍test命令的用法:检查一个文件是否存在,具体如下:
if test -f fred.c
then
...
fi
或者如下:
if [ -f fred.c ]
then
...
fi
test命令的退出码(表明条件是否满足)决定是否需要执行后面的条件语句。
需要注意的是:必须在[符号和被检查的条件之间留出空格,同样test命令之后总是应该有一个空格。
如果你喜欢把then和if放在同一行上,就必须要用一个分号把test语句与then分隔开,如下所示:
if [ -f fred.c ]; then
...
fi
test命令可以使用的条件类型可以归为三类:
(1)字符串比较
string1 = string2:如果两个字符串相同则结果为真
string1 != string2:如果两个字符串不同则结果为真
-n string:如果字符串不为空则结果为真
-z string:如果字符串为空(一个空串)则结果为真
(2)算数比较
expression1 -eq expression2:如果两个表达式相等则结果为真
expression1 -ne expression2:如果两个表达式不等则结果为真
expression1 -gt expression2:如果表达式1大于表达式2则结果为真
expression1 -ge expression2:如果表达式1大于或等于表达式2则结果为真
expression1 -lt expression2:如果表达式1小于表达式2则结果为真
expression1 -le expression2:如果表达式1小于或等于表达式2则结果为真
! expression:如果表达式为假则结果为真,否则为真
(3)与文件有关的条件测试
-d file:如果文件是一个目录则结果为真
-e file:如果文件存在则结果为真,需要注意的是历史上-e选项不可抑制,所以通常使用-f选项
-f file:如果文件是一个普通文件则结果为真
-g file:如果文件的SGID位被设置则结果为真
-r file:如果文件可读则结果为真
-s file:如果文件的长度不为0则结果为真
-u file:如果文件的SUID被设置则结果为真
-w file:如果文件可写则结果为真
-x file:如果文件可执行则结果为真
接下来以测试/bin/bash文件状态来说明如何使用这些选项:
#!/bin/sh
if [ -f /bin/bash ]
then
echo "file /bin/bash exist"
fi
if [ -d /bin/bash ]
then
echo "/bin/bash is a directory"
else
echo "/bin/bash is NOT a directory"
fi
各种与文件有关的条件测试的结果为真的前提是文件必须存在。
阅读(1701) | 评论(2) | 转发(0) |