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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



