您现在的位置:CSAI首页 > 网络频道 > Unix-AIX > 正文

Unix Shell程序编写的方法详解[2]

http://www.csai.cn 作者:skid 来源:赛迪网 2007年7月3日  进入社区

  内容传送给pg命令,pg命令在显示器上显示sort命令排序后的内容。

  "维护变量" :Shell可以维护一些变量。变量中存放一些数据供以后使用。用户可以用"="给变量赋值,如: $lookup=/usr/mydir

  该命令建立一个名为lookup的变量并给其赋值/usr/mydir,以后用户可以在命令行中使用lookup来代替/usr/mydir,例如:

           $echo $lookup

           结果显示:/usr/mydir

           为了使变量能被子进程使用,可用exprot命令,例如:

           $lookup=/usr/mydir

           $export lookup

  "运行环境控制" :当用户登陆启动shell后,shell要为用户创建一个工作的环境,如下:

  1>当login程序激活用户shell后,将为用户建立环境变量。从/etc/profile和.profile文件中读出,在这些文件中一般都用$TERM

  变量设置终端类型,用$PATH变量设置Shell寻找可执行文件的路径。

  2>从/etc/passwd文件或命令行启动shell时,用户可以给shell程序指定一些参数,例如"-x",可以在命令执行前显示该命令及其参数。后面详细介绍这些参数。

  "shell编程" :本文主要介绍的内容。

  shell本身也是一种语言(*可以先理解为unix命令的组合,加上类C的条件,循环等程序控制语句,类似dos批处理,但要强大的多),用户可以

  通过shell编程(脚本,文本文件),完成特定的工作。

  SHELL变量

  下面我们详细的介绍Bourne Shell的编程:

  自从贝尔实验室设计了Bourne

  Shell。从那时起许多厂商根据不同的硬件平台设计了许多版本得unix。但在众多版本的unix中,Bourne Shell

  一直保持一致。

  1>Bsh的启动:用户在登陆后,系统根据文件/etc/passwd中有关该用户的信息项启动Shell。例如某用户在passwd中

  的信息项为:

  ice_walk:!:411:103:Imsnow ,ice_walk:/home/ice_walk:/bin/bsh

  则表明,用户名是ice_walk等信息,在最后一项"/bin/bsh"表明用户的sh环境类型是bsh,于是系统启动之。在启动或执行(包括下面我们要讲

  的shell程序--脚本)过程中可以使用以下一些参数,我们一一说明:

    -a 将所有变量输出

    -c "string"从string中读取命令

    -e 使用非交互式模式

    -f 禁止shell文件名产生

    -h 定义

    -i 交互式模式

    -k 为命令的执行设置选项

    -n 读取命令但不执行

    -r 受限模式

    -s 命令从标准输入读取

    -t 执行一命令,然后退出shell

    -u 在替换时,使用未设置的变量将会出错

    -v 显示shell的输入行

    -x 跟踪模式,显示执行的命令

  许多模式可以组合起来用,您可以试试了,但-ei好象不行,你说why呢?

  使用set可以设置或取消shell的选项来改变shell环境。打开选项用"-",关闭选项用"+",多数unix允许打开或关闭a、f、e、h、k、n、u

  v和x选项。若显示Shell中已经设置的选项,执行:

  $echo $-Bsh中每个用户的home目录下都有一个.profile文件,可以修改该文件来修改shell环境。为了增加一个可执行文件的路径(例如/ice_walk/bin),可以把下面代码加入.profile中PATH=$PATH:/ice_walk/bin;exprot PATH.profile中shell的环境变量意思如下:

      CDPATH 执行cd命令时使用的搜索路径

      HOME 用户的home目录

      IFS 内部的域分割符,一般为空格符、制表符、或换行符

      MAIL 指定特定文件(信箱)的路径,有UNIX邮件系统使用

      PATH 寻找命令的搜索路径(同dos的config.sys的 path)

      PS1 主命令提示符,默认是"$"

      PS2 从命令提示符,默认是">"

      TERM 使用终端类型

  2>Bsh里特殊字符及其含义

  在Bsh中有一组非字母字符。这些字符的用途分为四类:作为特殊变量名、产生文件名、数据或程序控制以及引用和逃逸字符控制。他们

  可以让用户在Shell中使用最少的代码完成复杂的任务。

  *> Shell变量名使用的特殊字符

          $# 传送给命令Shell的参数序号

          $- 在Shell启动或使用set命令时提供选项

          $? 上一条命令执行后返回的值

          $$ 当前shell的进程号

          $! 上一个子进程的进程号

          $@ 所有的参数,每个都用双括号括起

          $* 所有参数,用双括号括起

          $n 位置参数值,n表示位置

          $0 当前shell名

  *>产生文件名的特殊字符包括"*","?","[]",上面讲过,不再多说。

  *>数据或程序控制使用的特殊字符

  >(file) 输出重定向到文件中(没有文件则创建,有则覆盖)

  >>(file) 输出重定向到文件中(没有则创建,有则追加到文件尾部)

  <(file) 输入重定向到文件 ; 命令分割符| 管道符 & 后台运行(例如:sleep 10 &) ` ` 命令替换,重定向一条命令的输出作为另一命令的参数。

  *>对于引用或逃逸的特殊字符

  Bsh用单引号' '和双引号" "将特殊字符或由空白分隔的字引用起来组成一个?

[1]  [2]