手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

请教哪儿有写unix

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

规范Shell:

  我们知道环境变量PS1是提示符,看下面程式chdir:
  if [ ! -d "$!" ]
  then
    echo "$1 is not a directory"
    exit 1
  fi
  cd $1
  PS1="'pwd'>"
  export PS1

  我们执行:

    $chdir /usr/ice666

  结果提示符号变成/usr/ice666>了吗?没有,为什么?

  原因在于:chdir在子Shell中执行,变量PS1的修改在当前Shell中也不会起作用,若要chdir完成意想中的功能,必须在当前Shell中执行该命令。最好的方法就是把其改成一个函数并且在.profile文档中定义。但若要把函数放到单个文档中并在当前Shell中执行,则需要使用 . 命令,并将chdir重写成一个函数,把其中的exit改写成return。下面代码是 .ice_ps的内容:

  #--提示符
  chdir()
  {
  if [ !-d "$1" ]
  then
    echo " $1 is not a directory"
    return
  fi
  cd $1
  PS1="'pwd'>"
  export PS1;
  }

  然后我们在.profile文档中加入下面语句

  .ice_ps

  然后在转换目录的时候,我们用chdir命令,结果是什么呢,自己实验好了!  
调试Shell程式

1>调试shell程式

  用户刚编写完Shell程式中,不可避免的会有错误,这时我们能够利用Bsh中提供的跟踪选项,该选项会显示刚刚执行的命令及参数。用户能够通过set命令打开-x选项或在启动Shell使用-x选项将Shell配置成跟踪模式。例如有下面代码ice_tx:

  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 -x ice_tx 2 3 4
  结果显示:
   [ 3 -eq 0 ]
   sum=0
   [ 3 -eq 0 ]
   expr 0 2
   sum=2
   shift
   [ 2 -eq 0 ]
   expr 2 3
   sum=5
   shift
   [ 1 -eq 0 ]
   expr 5 4
   sum=9
   [ 0 -eq 0 ]
   echo 9
  9

  从上面能够看出,跟踪模式下Shell显示执行的每一条命令连同该命令使用的变量替换后的参数值。一些控制字如if、then、until等没显示。

2>命令分组

  Shell中若干命令能够组成一个单元一起执行。为了标识一组命令,这些命令必须放到"()"或"{}"中。放在"()"中的命令将在子Shell中运行,而放在"{}"中的命令将在当前Shell中运行。子Shell中运行的命令不影响当前Shell的变量。当前Shell中运行的命令影响当前Shell的变量。

  $NUMBER=2
  $(A=2;B=2;NUMBER='expr $A $B';echo $NUMBER)
  结果为:4
  $echo $NUMBER
  结果为:2
  假如把上面的()变成{},结果会是怎么样的呢?

3>使用Shell分层管理器shl

  UNIX是个多道程式设计的操作系统,一些UNIX系统利用这一特性提供了Shell层次管理器shl。使用shl用户一次能够打开多个层次的Shell,其中活跃的Shell能够从终端上获得输入。但任何Shell的输出都可在终端上显示,除非显示被禁止。

  多个Shell中有一个为shl,当用户在某个Shell中工作时,能够通过使用特别字符(一般为Ctrl z)返回shl。为了同其他Shell区别,shl中提示符为">>>"。当用户工作在Shell层次管理器中时,能够创建、激活和删除Shell,下面是shl中使用的命令。

  create name    产生名为name的层次
  delete name    删除名为name的层次
  block name     禁止名为name的层次的输出
  unblock name    恢复名为name的层次的输出
  resume name    激活名为name的层次
  toggle       激活近来经常使用的层次
  name        激活名为name的层次

  layers [-l] name  对于表中的每个层次,显示其正在运行的进程的进程号,-l选项需要显示周详信息。

  help        显示shl命令的帮助信息
  quit        退出shl连同任何被激活的层次

总结

  在前面我们主要介绍了sh的变量、基本语法、程式设计等。假如掌控了这些内容,在学习其他UNIX下编程语言的时候,相信有一定的好处,我们说了,在大多数的UNIX中都提供Bourn Shell,而且很少有象sh这样强大的脚本编辑语言了,是系统管理员和程式员的一笔财富,并且无需额外的软件环境,对文档等处理借助unix命令,实现起来比c实现还要简单。

AngelDream 回复于:2003-12-14 15:46:54 受用了,我要好好学一下,谢谢两位。

RealRaul 回复于:2003-12-21 12:22:28 到SHELL专题去吧!!!那里更有很多呢!!!


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!