shell简介入门之bash编程之变量

发表于:2007-07-04来源:作者:点击数: 标签:
Bourne Shell的变量格式只有字符串变量,所以要使用数值运算则必须靠外部命令达到目的目 的。它的变量种类有下列几种。 A::用户变量:这是最常用的变量,我们可以用任何不包含空白字符的字符串来当作变量域名。设 定变量值时则用下列方式: var=string 调用

  Bourne Shell的变量格式只有字符串变量,所以要使用数值运算则必须靠外部命令达到目的目
  的。它的变量种类有下列几种。
  A::用户变量:这是最常用的变量,我们可以用任何不包含空白字符的字符串来当作变量域名。设
  定变量值时则用下列方式:
    var=string
  调用变量时则在变量域名前加上一"$"号。
  例如下面的test1.sh程序:
  #!/bin/bash
  name=tom
  echo name
  echo $name
  运行结果如下:
  name
  tom
  B::系统变量(环境变量):和用户变量相似,只不过此种变量会将其值传给其所执行的命令。
  要半一用户变量设定为系统变量,只要加上:
  export var
  以下是用户一进入系统之后就已设定好的系统变量:
  $HOME     用户自己的目录
  $PATH     执行命令时所搜寻的目录
  $TZ      时区
  $MAILCHECK  每隔多少秒检查是否有新的信件
  $PS1     在命令行时的提示号
  $PS2     当命令尚未打完时,Shell要求输入提示号
  $MANPATH   man指令的搜寻路径
  C::只读的用户变量:和用户变量相似,只不过这些变量不能被改变。要将用户变量设成只读的。
  例如:
  readonly var
   而若只打readonly则会列出所有只读的变量。应注意,系统变量不可以设定成只读的。例如:
  #!/bin/bash
  name=tom
  readonly name
  echo $name
  name=john
  readonly
  运行结果如下:
  tom
  ./test2.sh:name:readonly variable
  declare -ar BASH_VERSINFO=`([0]="2" [1]="03" [2]="0" [3]="2" [4]="RELEASE"
  [5]="i691-pc-linux-gnu")`
  declare -ir EUID="501"
  declare -ar GROUPS=`()`
  declare -ir PPID="1190"
  declare -r SHELLOPTS="braceexpand:hashall:interactive-comments"
  declare -ir UID="501"
  declare -r name="tom"
  D::特殊变量:有些变量 是一开始执行脚本时就会设定,并且不加以修改,但我们不叫它只读的
  系统变量,而叫它特殊变量(有些书会叫它只读的系统变量),因为这些变量是一执行程序时就
  有了,况且用户无法将一般的系统变量设定成只读的。以下是一些特殊变量:
  $0 这个程序的执行名字
  $n  这个程序的第n个参数值,n=1...9
  $*  这个程序的所有参数
  $# 这个程序的参数个数
  $$ 这个程序的PID
  $! 执行上一个背景指令的PID
  $? 上一个指令的返回值
  当执行这个程序时的参数数目超过9个时,我们可以使用shift命令将参数往前移一格,如此即可
  使用第10个以后的参数。除此之外,可以用set命令$n和$*,方法如下:
  set string
  这时$*的值即为string,而分解后则会放入$n。如果set命令后面没有参数,则会列出所有已以设
  定的变量以及其值:
  文件名: ex1 参数:this is a test
  例如:
  #!/bin/bash
  echo Filename:$0
  echo Arguments:$*
  echo No. of args.:$#
  echo 2nd arg.:$2
  shift
  echo No.of args.:$#
  echo 2nd arg.:$2
  set hello,everyone
  echo Arguments:$*
  echo 2nd arg.:$2
  运行结果如下:
  Filename: x1
  arguments: his is a test
  No. of args.: 4
  2nd arg.: is
  No. of args.:3
  2nd arg.: a
  Arguments: hello,everyone
  2nd arg.:everyone
  值得一提的是,当你想从键盘输入一变量值时,你可以使用下面的命令:
  read var1 var2......
  这时read 会将一个字分给一个变量。如果输入的字比变量还多,最后一个变量会将剩下的字当成
  其值。如果输入 的字比变量还少,则后面的变量会设成空字符串。如果需要处理数值运算,我
  们可以使用expr命令。
  
  

原文转自:http://www.ltesting.net