Linux SHELL中的变量详述

来源:互联网 发布:淘宝钻石展位考试 编辑:程序博客网 时间:2024/04/28 02:17

一,SHELL本地变量:

本地变量就如同局部变量一样,只在本SHELL中起作用。它不会影响到其他SHELL中的变量。

格式:NAME=value

1,变量的调用:在变量前加$ 
$ echo $HOME 
/home/hbwork 
$ WEEK=Satur 
$ echo Today is $WEEKday 
Today is 
$echo Today is ${WEEK}day   //若变量和其他字符组成新的字,这时就必须给变量加上大括号{},以更加清楚的显示给shell,哪个是真正的变量,以实现字符串的合并等功能。
Today is Saturday

2,显示变量值
        可以使用echo命令。需要注意的是,使用变量的时候必须在变量名前加上$符号。另外可以使用set命令,显示所有本地SHELL变量。包括SHELL中预定义了一些环境变量,且用户自己已经定义过的本地变量也会在其中显示。


3,Shell变量赋值从右到左进进行赋值(变量未赋值时,shell不报错,而是赋值为空!) 
$ X=$Y Y=y 
$ echo $X 

$ Z=z Y=$Z 
$ echo $Y

$

4,使用unset命令删除变量的赋值 
$ Z=hello 
$ echo $Z 
hello 
$ unset Z 
$ echo $Z

$

5,有条件的命令替换 (测试变量是否已经赋值)
在Bourne Shell中可以使变量替换在特定条件下执行,即有条件的环境变量替换。 这种变量替换总是用大括号括起来的。

${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

变量替换的值也可以是` `括起来的命令:

$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

0 0