civilvar 发表于 2018-8-25 12:35:49

shell用户定义变量

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

页: [1]
查看完整版本: shell用户定义变量