收录查询

[转] 5. Bourne Shell及shell编程

echo "Backup";;
        3)      echo "Unload";;
        *)      echo "Sorry $CHOICE is not a valid choice
                exit 1
        esac
 
        在上例中,*指默认匹配动作。此外,case模式中也可以使用逻辑操作,如下所示

 
        pattern1 | pattern2 )   command
                                command ;;
 
        这样可以将上面示例程序中允许用户输入数字或每一个大写字母。
 
        case "$CHOICE" in
                1|R)    echo "Restore";;
                2|B)    echo "Backup";;
                3|U)    echo "Unload";;
                *)      echo "Sorry $CHOICE is not a valid choice
                        exit 1
        esac
 
(5)循环控制
    <1> while循环:
        格式:
                while   command
                do
                        command
                        command
                        command
                        ...
                done
 
        例: 计算1到5的平方
        #!/bin/sh
        #
        #Filename: square.sh
        int=1
 
        while [ $int -le 5 ]
        do
                sq=`expr $int * $int`
                echo $sq
                int=`expr $int + 1`
        done
        echo "Job completed"
 
        $ sh square.sh
        1
        4
        9
        16
        25
        Job completed
 
      <2> until循环结构:
        格式:
                until command
                do
                        command
                        command
                        ....
                        command
                done
 
        示例:使用until结构计算1-5的平方
        #!/bin/sh
 
        int=1
 
        until [ $int -gt 5 ]
        do
                sq=`expr $int * $int`
                echo $sq
                int=`expr $int + 1`
        done
        echo "Job completed"
 
     <3> 使用shift对不定长的参数进行处理
        在以上的示例中我们总是假设命令行参数唯一或其个数固定,或者使用$*将整个命

        行参数传递给shell script进行处理。对于参数个数不固定并且希望对每个命令参

        进行单独处理时则需要shift命令。使用shift可以将命令行位置参数依次移动位置

        即$2->$1, $3->$2. 在移位之前的第一个位置参数$1在移位后将不在存在。
 
        示例如下:
 
        #!/bin/sh
        #
        #Filename: shifter
 
         until [ $# -eq 0 ]
         do
            echo "Argument is $1 and `expr $# - 1` argument(s) remain"
            shift
         done
 
 
         $ shifter 1 2 3 4
         Argument is 1 and 3 argument(s) remain
         Argument is 2 and 2 argument(s) remain
         Argument is 3 and 1 argument(s) remain
         Argument is 4 and 0 argument(s) remain
         $
 
         使用shift时,每进行一次移位,$#减1,使用这一特性可以用until循环对每个参
         数进行处理,如下示例中是一个求整数和的shell script:
 
        #!/bin/sh
        # sumints - a program to sum a series of integers
        #
 
         if [ $# -eq 0 ]
         then
            echo "Usage: sumints integer list"
            exit 1
         fi
 
         sum=0
 
         until [ $# -eq 0 ]
         do
            sum=`expr $sum + $1`
            shift
         done
         echo $sum
 
 
        $ sh sumints 324 34 34 12 34
        438
        $
 
        使用shift的另一个原因是Bourne Shell的位置参数变量为$1~$9, 因此通过位置变

        只能访问前9个参数。但这并不等于在命令行上最多只能输入9个参数』
posted @ 2006-08-21 06:21  ->  阅读(202)  评论(0)    收藏  举报