中 Unix系列shell程序编写( 三 )


int1 -ne int2两数不等为真
int1 -gt int2int1大于int2为真
int1 -ge int2int1大于等于int2为真
int1 -lt int2int1小于int2为真
int1 -le int2int1小于等于int2为真下面的例子反映了字符串比较与数字比较的不同:$str1=1234
$str2=01234
$test $str1 = $str2
$echo $?
结果显示:1
$test $str1 -eq $str2
$echo $?
结果显示:03>有关文件的测试使用test进行的第三类测试是测试文件的状态,用户可以测试文件是否存在,是否可写以及其他文件属性 。下面是文件测试时使用的选项 。注意只有文件存在时,才有可能为真 。-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
4>复杂的条件测试(and 、or 、not)
-a与
-o或
!非
就是组合条件了,任何高级语言中都有的(NOT 、AND 、OR),例如:
$test -r em.null -a -s em.null
$echo $?
结果显示:1
说明了em.null并不是可读并且非空的文件5>另一种执行test的方法bsh中还有另一种执行test命令的方法,就是把测试条件放到一对[ ]中,例如:
$int1=4
$[ $int1 -gt 2 ]
$echo $?
结果显示:0
要注意在[ 的后面和 ]符号的前面要有一个空格 。
下面我们用test命令写个简单但比较完善的程序:#-- 备份程序

#-- 检查参数
if [ $# -ne 1 ]
thenecho "请在程序名后面指出要备份文件所在目录!"
exit 1
fi
#-- 检查目录名是否有效
if [ !-d "$1" ]
then
echo "$1 不是一个目录!"
exit 2
fi
cd $1
ls -a | cpio -o >/dev/mnt0
if [ $? -eq 0 ]
then
rm *
else
echo "cpio执行不成功!备份失败..."
exit 3
fi6>空命令在Bsh中用 : 代表空命令,就是充个数,什么都不做【中 Unix系列shell程序编写】7>嵌套if语句和elif结构检查条件1
A:当条件1为真,则执行一部分操作
B:若条件1为假,检查条件2
1)若条件2为真,执行另外一部分操作
2)若条件2为假,检查条件3
3)若条件3为真,执行其他一部分操作
语法如下:
if command
then
command
else
if command
then
command
else
if command
then
command
fi
fi
fi8>elif语句嵌套if语句有时会给用户带来混乱,特别是什么时候fi语句很难判断 。因此Bourne Shell又提供了elif语句 。elif是else-if的缩写,它表示是if语句的继续 。格式为:if command
then
command
elif command
then
command
elif command
then
command
fi上面介绍的嵌套if语句和elif语句完成相同的功能,用户可以根据自己的喜好选择一种使用 。9>case语句前面说的elif语句替代if-then-else语句,但有时在编程时还会遇到对同一变量进行多次的测试,该情况可以用多个elif语句实现,但还有一种更简单的方法就是用case语句 。case语句不但取代了多个elif和then语句,还可以用变量值对多个模式进行匹配,当某个模式与变量值匹配后,其后的一系列命令将被执行,下面是case语句使用的语句 。case value in
pattem 1)
command
command
pattem 2)
command
command
....
pattem)
command;
esaccase语句只执行其中的一组命令,当变量值与多个模式相匹配时,只有第一个匹配的模式对应的命令被执行 。";;"表示该模式对应的命令部分程序 。通过学习下面的read语句,我们们再举例子说明case语句的用法 。10>read语句Shell程序不但可以通过命令行参数得到输入数据,还可以使用read命令提示用户输入数据,其语法格式为:read var1 var2... ...varn当Bsh遇到一个read语句时,在标准输入文件中读取数据直到一个换行符 。此时Shell在解释输入行时,不进行文件名或变量的替换,只是简单地删除多余的空格 。然后Shell将输入行的第一个字的内容给变量1,第二个给变量2,直到所有变量都赋上值或是输入行为空 。若输入行中字的个数超过变量个数,Shell将把输入行中剩余的所有字的内容都赋给最后一个变量 。当变量个数多于输入行字的个数时候,多于的变量将赋一个空值 。输入行的每一个字是由空格分隔的一个字母和数字组成的字符串 。$read var1 var2 var3

推荐阅读