1.Linux Bash变量类型:

   局部变量;本地变量;全局变量;位置变量;特殊变量


2.不同类型变量的定义或作用范围:

(1)局部变量:只存在于函数内部,对局部代码有效;

(2)本地变量:只对当前shell有效,对其子shell和其他shell无效;

(3)全局变量:也叫环境变量,只对当前shell及其子shell有效,对其他shell无效;

(4)位置变量:一种在调用 shell 程序时按空格分割命令行得到的变量,是在程序名之后输入的参数。

(5)特殊变量:也叫预定义变量


3.不同类型变量相关说明及对应的关键字

(1)局部变量:声明局部变量时需要使用关键字local,如:local Var_Name="Value"

            切记:局部变量仅能在函数中使用。

(2)本地变量:在不使用任何关键字的情况下,声明的变量就是本地变量,如:Num1=10

            换而言之,声明本地变量时,关键字可省略;

            可用关键字是set; [set] Num1=10 <==> Num1=10

(3)全局变量:可使用关键字:export,declare

(4)位置变量:位置变量是一种在调用 shell 程序时按空格分割命令行得到的变量,是在程序名之   后输入的参数。位置变量的值可以用 $N 调用,N 是一个数字,如果$1。$0 表示所执行的命令或脚本程序的名字,包括脚本程序的路径。类似 C 语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从 0 开始。第0 号为 shell 程序名字(确切地说 $0 不是一个位置参数,在显示当前所有的位置参数时是不包括的),从1开始表示传递给程序的参数。如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。 在位置参数$9之后的参数必须用括号括起来,例如:${10}, ${11}, ${12}。

(5)特殊变量:下面这些都是常见的特殊变量      

$# 传递给shellscript的参数个数

$* 传递给shellscript的参数

$@ 所有参数,个别的用双引号括起来

$? 上一个命令的返回代码

$! 最后一个子进程的进程号

$_ 命令行最后一个参数

$$ 表示当前进程的进程号


4.误区:把局部变量当成本地变量,这是一个很迷惑人的错误,在以前的看过的书籍和视频中,他们似乎都是这样讲的,尽管他们也强调了local,set的作用范围,但是对于具体的概念却比较模糊。


5.变量的命名规范:

       只能使用数字、字母和下划线组成;

       不能以数字开头;

       不能使用程序中的关键字;

       严格区分大小写;

       见名知义;totalWeight

       忠告:养成好习惯真的很重要


6.变量的声明与赋值变量

说明:一般来说,我们可先赋值,再声明变量;也可变量的声明和赋值同时进行。

      给变量赋的值,一般可不加引号,但有2种情况除外:(1)变量引用;(2)变量值中有空格

(1)本地变量的声明与赋值

  所用关键字:set,declare  注:不带选项的declare可声明本地变量

       法1:varname=value

       法2:set varname=value

       法3:declare varname=value

(2)局部变量的声明与赋值

  所用关键字:local   注:仅在函数中使用

       local varname=value

(3)全局变量的声明与赋值

  所用关键字:export,declare -x

       法1export

       先声明后赋值,如下

       varname=value

       export varname

       声明和赋值同时进行,如下

       export varname=value


       法2declare

       先声明后赋值,如下

       declare -x varname

       varname= value

       声明和赋值同时进行,如下

       declare -x varname=value

       (4)变量值中有空格

       如:String=hello mingming ,由于变量值中有空格,若不加引号,结果就事与愿违了;

       因此我们可以用单、双引号把变量值引起来,如:String='hello mingming'

       或String="hello mingming"

(5)变量引用

       普通的变量引用:声明本地变量Test='hello mingming'和String=$Test ,此时执行echo操         作的话,并不会报错。

       命令替换:正确做法如下:

       法1:

       [root@station70 ~]# Time=`date +%F`

       [root@station70 ~]# echo $Time    

       2014-02-23

       法2:

       [root@station70 ~]# Time=$(date +%F)

       [root@station70 ~]# echo $Time      

       2014-02-23


未完,待续...