shell编程的核心内容(2)

来源:互联网 发布:php如何解决高并发抢购 编辑:程序博客网 时间:2024/05/22 17:52

本篇文章紧接上篇SHELL编程核心内容(1),SHELL不仅仅是命令,很多情况,我们可以把它作为一种编程的工具,比如,用SHELL实现一个学生信息的管理系统。

本文的写作目的就是让你在十分钟内学会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---当字符串s1s2相同时结果为真值

s1 != s2---当字符串s1s2不相同时结果为真值

-z s1---s1串长度等于0

-n s1---s1串长度不等于0

• 3)用于对整数n的测试

n1 –eq n2 ---当整数n1n2相等时,返回真值

n1 –ne n2 ---当整数n1n2不相等时,返回真值

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。