收录查询

[转] 7. Bourne Shell及shell编程

"
                  cpio -i </dev/rmt/0h;;
 
               2) echo "Archiving..."
                  ls | cpio -o >/dev/rmt/0h;;
 
               3) echo "Unloading..."
                  ls | cpio -o >/dev/rmt/0h;;
 
               4) echo "Quitting"
                  break;;
            esac
 
         #Check for cpio errors
 
            if [ $? -ne 0 ]
            then
               echo "A problem has occurred during the process"
               if [ $CHOICE = 3 ]
               then
                  echo "The directory will not be erased"
               fi
 
               echo "Please check the device and try again"
               continue
            else
               if [ $CHOICE = 3 ]
               then
                  rm *
               fi
            fi
         done
 
 
(6)结构化编程:定义函数
   同其他高级语言一样,shell也提供了函数功能。函数通常也称之为子过程(subroutine)
,
   其定义格式如下:
 
   funcname()
   {
        command
        ...
        command;  #分号
   }
 
   定义函数之后,可以在shell中对此函数进行调用,使用函数定义可以将一个复杂的程序

   为多个可管理的程序段,如下所示:
 
        # start program
 
         setup ()
         {  command list ; }
 
         do_data ()
         {  command list ; }
 
         cleanup ()
         {  command list ; }
 
         errors ()
         {  command list ; }
 
         setup
         do_data
         cleanup
         # end program
 
     技巧:
        . 在对函数命名时最好能使用有含义的名字,即函数名能够比较准确的描述函数所
完成
          的任务。
        . 为了程序的维护方便,请尽可能使用注释
 
 
     使用函数的另一个好处就是可以在一个程序中的不同地方执行相同的命令序列(函数),
     如下所示:
 
     iscontinue()
     {
        while true
        do
                echo -n "Continue?(Y/N)"
                read ANSWER
 
                case $ANSWER in
                        [Yy])   return 0;;
                        [Nn])   return 1;;
                        *) echo "Answer Y or N";;
                esac
        done
     }
 
     这样可以在shell编程中调用iscontinue确定是否继续执行:
 
     if iscontinue
     then
        continue
     else
        break
     fi
 
 
  ** shell函数与shell程序非常相似,但二者有一个非常重要的差别:shell程序是由子sh
ell
     执行的,而shell函数则是作为当前shell的一部分被执行的,因此在当前shell中可以

     变函数的定义。此外在任意shell(包括交互式的shell)中均可定义函数,如:
 
     $ dir
     dir: not found
     $ dir () { ls -l ;}
     $ dir
     total 5875
     -rw-r--r--   1 hbwork        100 Nov 10 23:16 doc
     -rw-r--r--   1 hbwork    2973806 Nov 10 23:47 ns40docs.zip
     -rw-r--r--   1 hbwork    1715011 Nov 10 23:30 ns840usr.pdf
     -rw-r--r--   1 hbwork    1273409 Sep 23  1998 radsol21b6.tar.Z
     -rw-r--r--   1 hbwork       7526 Nov 10 23:47 wget-log
     -rw-r--r--   1 hbwork       1748 Nov 13 21:51 wget-log.1
     $ unset dir
     $ dir () {
     > echo "Permission  Link Owner Group  File_SZ   LastAccess FileName"
     > echo "-----------------------------------------------------------"
     > ls -l $*;
     > }
 
        $ dir
        Permission  Link Owner Group  File_SZ   LastAccess FileName
        -----------------------------------------------------------
        total 5875
        -rw-r--r--   1 hbwork        100 Nov 10 23:16 doc
        -rw-r--r--   1 hbwork    2973806 Nov 10 23:47 ns40docs.zip
        -rw-r--r--   1 hbwork    1715011 Nov 10 23:30 ns840usr.pdf
        -rw-r--r--   1 hbwork    1273409 Sep 23  1998 radsol21b6.tar.Z
        -rw-r--r--   1 hbwork       7526 Nov 10 23:47 wget-log
        -rw-r--r--   1 hbwork       1748 Nov 13 21:51 wget-log.1
 
     通常情况下,shell script是在子shell中执行的,困此在此子shell中对变量所作的
     修改对父shell不起作用。点(.) 命令使用shell在不创建子shell而由当前shell读取
     并执行一个shell script, 可以通过这种方式来定义函数及变量。此外点(.)命令最
     常用的功能就是通过读取.profile来重新配置初始化login变量』
posted @ 2006-08-21 06:22  ->  阅读(164)  评论(0)    收藏  举报