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

请教哪儿有写unix

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

3>Bsh的变量

  前面我们在多个地方引用了变量,当Shell碰到一个"$"符时(没有被引用或逃逸),他将认为其后为一变量。不论该变量是环境变量还是用户自定义的变量,在命令行中变量名要被变量值替换。例如命令:ls $HOME将列出变量HOME对应目录下的文档。 用户能够在命令行中的任何地方进行变量替换。包括命令名本身,例如:

    $dir=ls
    $$dir f*

  将列出以f开头的文档。

  现在周详的介绍下Bsh的变量。Bsh中有四类变量:用户定义的变量、位置变量(shell参数)、预定义变量及环境变量。

  用户定义的变量:

  用户定义的变量由字母和下划线组成,并且变量名的第一个字符不能为数字(0~9)。和其他UNIX名字相同,变量名是大小写敏感的。用户能够在命令行上用"="给变量赋值,例如:

    $NAME=ice_walk

  给变量NAME赋值为ice_walk,在应用变量NAME的时候,在NAME前加"$"即可,前面已说,不再废话(别说我废话多,关键是没当过老师:()。能够用变量和其他字符组成新的字,例如:

    $SUN=sun
    $echo ${SUN}day

  在应用shell变量时候,能够在变量名字两边$后面加上{},以更加清楚的显示给shell,哪个是真正的变量,以实现字符串的合并等功能。
 
  结果显示:sunday(注意不能echo $SUNday,因为SUNday变量没定义,读者试下执行结果) 用户也能够在命令行上同时对多个变量赋值,赋值语句之间用空格分开:

    $X=x Y=y

    注意变量赋值是从右到左进行的

    $X=$Y Y=y
    X的值是y
    $X=z Y=$Z

    Y的值是空(变量未赋值时,shell不报错,而是赋值为空)

  用户能够使用"unset <变量>"命令清除给变量赋的值

用户使用变量时要在其前面加一"$"符,使变量名被变量值所替换。Bsh能够进行变量的条件替换,即只有某种条件发生时才进行替换。替换条件放在一对大括号{}中,如:

    ${variable: -value} variable是一变量值,value是变量替换使用的默认值

    $echo Hello $UNAME
    结果显示:Hello
    $echo Hello ${UNAME: -there}
    结果显示:Hello there
    $echo $UNAME
    结果显示: (空)
    $UNAME=John
    $echo Hello ${UNAME: -there}
    结果显示:Hello John

  能够看出,变量替换时将使用命令行中定义的默认值,但变量的值并没有因此而改变。另外一种替换的方法是不但使用默认值进行替换,而且将默认值赋给该变量。其形式如下:

    ${variable:=value}

  该形式在变量替换后同时把值value符给变量variable。

    $echo Hello $UNAME
    结果显示:Hello
    $echo Hello ${UNAME:=there}
    结果显示:Hello there
    $echo $UNAME
    结果显示:there
    $UNAME=John
    $echo Hello ${UNAME:-there}
    结果显示:Hello John

  变量替换的值也能够是` `括起来的命令:

    $USERDIR={$Mydir: -`pwd`}

  第三种变量的替换方法是只有当变量已赋值时才用指定值替换形式:

    ${variable: value}

    只有变量variable已赋值时,其值才用value替换,否则不进行任何替换,例如:

    $ERROPT=A
    $echo ${ERROPT: "Error tracking is acitive"}
    结果显示:Error tracking is acitive
    $ERROPT=
    $echo ${ERROPT: "Error tracking is acitive"}
    结果显示: (空)

  我们还能够使用错误检查的条件进行变量替换:

    ${variable:?message}

当变量variable已配置时,正常替换。否则消息message将送到标准错误输出(若此替换出现在shell程式中,那么该程式将终止)。 例如:

    $UNAME=
    $echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}
    结果显示:UNAME HAS NOT BEEN SET

    $UNAME=Stephanie
    $echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}

    结果显示:Stephanie
    当没有指定message时,shell将显示一条默认的消息,例如:

    $UNAME=
    $echo $ {UNAME:?}
    结果显示:sh:UNAME:parameter null or not set

4>位置变量或Shell参数

  在shell解释用户的命令时,将把命令行的第一个字作为命令,而其他的字作为参数。当命令对应的可执行文档为Shell程式时,这些参数将作为位置变量传送给该程式。第一个参数记为$1,第二个为$2....第九个为$9。其中1到9是真正的参数名,"$"符只是用来标识变量的替换。

  位置变量$0指命令对应的可执行文档名。在后面将周详介绍位置变量。

  1.只读变量

  用户将变量赋值后,为了防止以后对该变量的修改,能够用以下命令将该变量配置为只读变量:

    readonly variable

  2.export命令

  shell执行一个程式时,首先为该程式建立一个新的执行环境,称为子shell。在Bourne Shell中变量都是局部的,即他们只在创建他们的Shell中有意义。用户能够用export命令让变量被其他子Shell识别。但某用户的变量是没法让其他用户使用的。

  当用户启动一个新shell时,该shell将使用默认的提示符。因为赋给变量PS1的值只在当前shell中有效。为了让子Shell使用当前Shell中定义的提示符号,能够使用export命令:

    $PS1="Enter command:"
    Enter command:export PS1
    Enter command:sh
    Enter command:

    此时变量PS1变成了全局变量。他能够被其子Shell使用。当变量被配置成全局的以后,将一直保持有效直到用户退出该变量所在的Shell。用户能够在文档.profile中给一个变量永久赋值。详见"规范Shell"。

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