shell编程的核心内容(2)
时间:2009-07-09 来源:haryen
本文的写作目的就是让你在十分钟内学会SHELL编程。SHELL编程的精髓在于条件测试和分支结构。SHELL的分支结构与C语言的分支结构本质上是一样的,只是语法词法有些区别。条件测试,是为分支结构提供条件的。
while [ -r filename ]
do
echo’’in while”
done
猜得到,我们想用while做循环,那么,循环条件是什么呢?循环体又是什么呢?
我先告诉你,条件是[ -r filename ],循环体就是do和done中间的命令echo’’in while”。
While结构的用法就是这样的。这个,真的没有为什么。
我们学习SHELL编程,要掌握的,也是10分钟之内能掌握的,就是,每一种分支结构的格式,加上诸如[ -r filename ]的条件测试的用法。当然,这些条件不只是用在while中,也是用于其它分支结构的。
那么 –r 表示什么呢?
我们看下列表:
• 1)对文件特性的测试
-d file---文件file存在且为目录文件
-f file---文件file存在且为普通文件
-r file---文件file存在且为可读文件
-w file---文件file存在且为可写文件
-x file---文件file存在且为可执行文件
-s file---文件file存在且文件长度为非零
• 2)对字符串内容的测试
s1 = s2---当字符串s1和s2相同时结果为真值
s1 != s2---当字符串s1和s2不相同时结果为真值
-z s1---s1串长度等于0
-n s1---s1串长度不等于0
• 3)用于对整数n的测试
n1 –eq n2 ---当整数n1与n2相等时,返回真值
n1 –ne n2 ---当整数n1与n2不相等时,返回真值
n1 –lt n2 ---当整数n1小于n2时,返回真值
n1 –le n2 ---当整数n1小于等于n2时,返回真值
n1 –gt n2---当整数n1大于n2时,返回真值
n1 –ge n2---当整数n1大于等于n2时,返回真值
现在,我们就可以用任何分支结构配合上述的测试条件了。几种分支结构如下:
一. if [ 条件1 ]
then
命令1
elif [ 条件2 ]
then
命令2
else
命令3
fi
二.
case 值 in
模式1)
命令1
;;
……
*)
命令n
;;
esac
三.
while[condition]
• do
• commands
• ……
• last-command
• done
四.
• until [condition]
• do
• commands
• ……….
• last-command
• done
五.
for 变量名 in 列表
do
命令
done
不再多说这些循环是什么了,学过C的都知道。我们来看一个简单的实例:
#!/bin/sh
#forTest
#to test the method of for
COUNTER=0
for FILES in *
do
COUNTER=`expr $COUNTER + 1`
done
echo "There are $COUNTER files in `pwd` "
这个实例囊括了算术运算的做法。是这样的:
expr是对shell变量进行算术运算的操作.例:
$ count=0
$ count=$count+1
$ echo $count
显示为0+1
$ count=`expr $count+1`
$ echo $count
显示为1
要想做一个算术运算,必须用expr对变量取值,脚本语言里,这种用法是通用的。通常用于硬件测试的TCL脚本就是这样的。
好了,上面的实例都能看懂了。for FILES in *就是当前目录下的文件作为循环条件。COUNTER=`expr $COUNTER + 1`就是统计文件个数。
如果你读懂了这几个例子,就没问题了。相信真的也就是10分钟的时间,除非你在仔细的看上述哪些测试条件和循环格式。我觉得用的时候可以查,不用记。
SHELL编程就真的只是这些,当然还能用函数调用的方式使用SHELL