文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[转载]Bourne Shell及shell编程 三

[转载]Bourne Shell及shell编程 三

时间:2005-11-26  来源:ghostzhu



版权声明:
本文内容为大连理工大学LINUX选修课讲义,欢迎大家转载,但禁止使用本材料进行
任何商业性或赢利性活动。转载时请保留本版权声明。

作者:何斌武,[email protected],大连理工大学网络中心,April 1999.

[请点击阅读全文]

                 ——by ghostzhu

------------------------------------------------------------------------------

代码:

Bourne Shell及Shell编程(2)
      h.交互式从键盘读入数据
        使用read语句,其格式如下:
 
        read var1 var2 ... varn
 
        read将不作变量替换,但会删除多余的空格,直到遇到第一个换行符(回车),

        并将输入值依次赋值给相应的变量。
 
        例:
        $ read var1 var2 var3
        Hello   my  friends
        $ echo $var1 $var2 $var3
        Hello my friends
        $ echo $var1
        Hello
        $ read var1 var2 var3
        Hello my dear friends
        $ echo $var3
        dear friends   <-输入多余变量时,输入值余下的内容赋给最后一个变量
        $ read var1 var2 var3
        Hello friends
        $ echo $var3
                        <- var3为空
        $
 
        在shell script中可使用read语句进行交互操作:
 
        ...
        #echo -n message 输出结果后不换行
        echo -n "Do you want to continue: Y or N"
        read ANSWER
 
        if [ $ANSWER=N -o $ANSWER=n ]
        then
                exit
        fi
 
      i. case结构:结构较elif-then结构更清楚
 
        比较if-then语句:
 
        if [ variable1 = value1 ]
        then
            command
            command
        elif [ variable1 = value2 ]
        then
            command
            command
        elif [ variable1 = value3 ]
        then
            command
            command
        fi
 
        相应的case结构:
 
        case value in
            pattern1)
               command
               command;;
            pattern2)
               command
               command;;
            ...
            patternn)
               command;
         esac
 
       * case语句只执行第一个匹配模式
 
       例:使用case语句建立一个菜单选择shell script
 
       #Display a menu
       echo _
       echo "1 Restore"
       echo "2 Backup"
       echo "3 Unload"
       echo
 
       #Read and excute the user s selection
       echo -n "Enter Choice:"
       read CHOICE
 
       case "$CHOICE" in
        1)      echo "Restore";;
        2)      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个参数。此时如果

访问
        前9个参数之后的参数,就必须使用shift.
 
        另外shift后可加整数进行一次多个移位,如:
 
                shift 3

相关阅读 更多 +
排行榜 更多 +
猎枪行动

猎枪行动

飞行射击 下载
导弹袭击

导弹袭击

飞行射击 下载
猫猫突围封锁要塞新手打法

猫猫突围封锁要塞新手打法

飞行射击 下载