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

请教哪儿有写unix

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

基本语句

  从本节起,我们将周详介绍Shell程式设计的基本知识,通过编写Shell脚本,用户能够根据自己的需要有条件的或重复的执行命令。通过Shell程式,能够把单个的UNIX命令组合成一个完全实用的工具,完成用户的任务。

  1>什么是Shell程式

  当用户在UNIX Shell中输入了一条复杂的命令,如:

    $ls -R /|greo myname |pg

  我们能够称用户在对Shell编程,当把这条语句写在一个文档里,并且符给该文档可执行权限,那么该文档就是我们传统上说的Shell程式。

  2>简单的Shell程式

  假设用户每天使用下述命令备份自己的数据文档:

    $cd /usr/icewalk;ls * |cpio -o > /dev/fd0

  我们能够把他写在一个文档,如:ba.sh中:

    $cat >ba.sh
    cd /usr/icewalk
    ls * |cpio -o > /dev/fd0
    ^D  (ctrl_d)

  程式ba.sh就是Shell脚本,用户能够用vi或其他编辑工具编写更复杂的脚本。

  此时用户备份文档只需要执行Shell程式ba.sh,执行时需在当前Shell中创建一个子Shell:

    $sh ba.sh

  程式sh和用户登陆时执行的Bourne Shell相同,但当Sh命令带参数ba.sh后,他将不再是个交互式的Shell,而是直接从文档ba.sh中读取命令。

  执行ba.sh中命令的另一方法是给文档ba.sh执行权限:

    $chmod x ba.sh

  此时,用户能够输入文档名ba.sh做为一个命令来备份自己的数据,需要注意的是,用这种方法执行命令的时候,文档ba.sh必须存在于环境变量$PATH所指定的路径上。





Unix系列shell程式编写(中)

3>在Shell中使用数据变量

  用户能够在Shell中使用数据变量,例如ba.sh程式:

    cd/usr/icewalk
    ls|cpio -o > /dev/fd0

  该程式中要备份的目录为一常量,即该程式只能用来备份一个目录。若在该程式中使用变量,则会使其更通用:

    workdir=$1
    cd $workdir
    ls * |cpio -o > /dev/fd0

  通过这一改变,用户能够使用程式备份变量$workdir指定的目录。例如我们要备份/home/www的内容,只要运行ba.sh /home/www即可实现。(若不明白 $1,下面将周详介绍shell参数的传递,$1代表本sh程式-ba.sh的第一个参数)

  4>在Shell程式中加上注释

  为了增加程式的可读性,我们提倡加入注释。在Shell程式中注释将以"#"号开始。当Shell解释到"#"时,会认为从"#"号起一直到该行行尾为注释。

  5>对Shell变量进行算术运算

  高级语言中变量是具备类型的,即变量将被限制为某一数据类型,如整数或字符类型。Shell变量通常按字符进行存储,为了对Shell变量进行算术运算,必须使用expr命令。

  expr命令将把一个算术表达式作为参数,通常形式如下:

    expr [数字] [操作符] [数字]

  由于Shell是按字符形式存储变量的,所以用户必须确保参加算术运算的操作数必须为数值。下面是有效的算术操作符:

        两个整数相加
    -   第一个数减去第二个数
    *   两整数相乘
    /   第一个整数除以第二个整数
    %   两整数相除,取余数
  例如:
    $expr 2 1
     结果显示:3
    $expr 5 - 3
     结果显示:2

若expr的一个参数是变量,那么在表达式计算之前用变量值替换变量名。
    $int=3
    $expr $int 4
    结果显示:7
  用户不能单纯使用"*"做乘法,若输入:
    $expr 4*5
  系统将会报错,因为Shell看到"*"将会首先进行文档名替换。正确形式为:
    $expr 4 \* 5
     结果显示:20
  多个算术表达式能够组合在一起,例如:
    $expr 5 7 / 3
    结果显示:7
  运算次序是先乘除后加减,若要改变运算次序,必须使用"`"号,如:
    $int=`expr 5 7`
    $expr $int/3
     结果显示:4
    或:
    $expr `expr 5 7`/3
    结果显示:4

  6>向Shell程式传递参数

  一个程式能够使用两种方法获得输入数据。一是执行时使用参数。另一种方法是交互式地获得数据。vi编辑程式能够通过交互式的方法获得数据,而ls和expr则从参数中取得数据。以上两种方法Shell程式都能够使用。在"交互式读入数据"一节中将介绍Shell程式通过交互式的方法获得参数。

  通过命令行给Shell程式传递参数能够扩大程式的用途。以前面提到的ba.sh程式为例:
  $cat >re.sh
  cd $workdir
  cpio -i < /dev/fd0
  ^d

  程式re.sh恢复了ba.sh程式备份的任何文档。若只从软盘上恢复一个指定的文档,能够用该文档名作为参数,传递给Shell程式re.sh:

  程式改写如下:
  $cat >re2.sh
  cd $workdir
  cpio -i $1 < /dev/fd0
  ^d

  用户能够指定要恢复的文档,例如fname

  $re2.sh fname

此时文档fname作为第一个位置参数传递给re2.sh,re2.sh的缺点是要恢复两个或多个文档要重复运行,我们能够用$*变量传递不确定的参数给程式:

  $cat >re3.sh
  cd $workdir
  cpio -i $* < /dev/fd0
  ^d

  我们就能够恢复多个文档,例如fname1,fname2,fname3
  $re3.sh fname1 fname2 fname3
  (以上程式re.sh,re2.sh,re3.sh,假设用户已chmod了可执行权利)

  因为没有赋值的变量能够作为NULL看待,所以若是程式re3.sh在执行时候没赋予参数,那么一个空值将被插入到cpio命令中。该命令将恢复任何保存的文档。

条件判断语句

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