学习Linux Shell变量时,你可能会遇到Shell变量如何使用的问题,这里将介绍本地变量以及环境变量等的使用。
    变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储shell脚本运行时可更改的程序信息。
一,各种变量
 (1)本地变量
  本地变量(也就是用户自定义变量)只能在当前SHELL环境下获得赋值,进入其他子SHELL就不能获得赋值了
 
 (2)环境变量
  环境变量时作用在全局的,也就是不管你怎么进子SHELL,也就是改变环境,环境变量都可以获得赋值。
         export (对子shell有效)导出环境变量
           例 :export $NAME
         printenv 显示环境变量的值。
           例:printenv Name
                 如果您指定 Name 参数,那么系统将只显示与 Name 参数相关联的值。如果不设置 Name 参数,printenv 命令显示当前环境,每行显示一个 Name=Value 序列。
             如果指定一个没有在环境中定义的 Name 参数,printenv 命令返回退出状态 1;否则返回退出状态 0(零)。
         env 允许您显示您的当前环境或者在一个被改变了的环境下运行一个指定的命令。
             如果没有标志或者参数被指定,env 命令会显示您的当前环境,每行显示一个 Name=Value 对。
             退出状态
             0       env 成功完成。
            1-125 在 env 命令中发生了一个错误。
            126     由 Command 参数指定的命令被发现了,但是不能被调用。
            127     由 Command 参数指定的命令未被发现。
            
  (3)特殊变量(内部变量)
     $0 shell或shell脚本的名字
     $# 参数的个数
     $_ 代表上一个命令的最后一个参数
     $$ 代表所在命令的PID(pid就是进程id)
     $! 代表最后执行的后台命令的PID
     $? 0表示成功 1-255不成功
     例:编写脚本script1.sh
       #!/bin/bash
       echo “Number of parameters is:” $#
       echo “Program name is:” $0
       echo “Parameters  is:” $*
     执行:./script1.sh xiaoming daniu
       结果:Number of parameters is:2
             Program name is:script1.sh
             Parameters is:xiaoming daniu
   (4)位置变量
     在shell脚本中应有变量,接收实参,这类变量的名称很特别,分别是1,2,3,…,这类变量称为位置变量。位置参数1存放在位置变量1中,位置参数2存放位置变量2中,……,在程序中可以使用$1,$2,……来访问。
     $1 $2 $3 $数字 必须从1开始,命令行可以向脚本传递参数,并可以在脚本中调用
      注:当位置变量个数超出9个时,就不能直接引用位置大于9的位置变量了,必须用shift命令移动位置参数。
         shift [n]
   (5)运算变量
     $[$A+$B]或 $(($A+$B))或expr
      EXINIT保存使用vi编辑器的初始化选项。
      例:要显示行号,则如下:
            EXINIT='set nu';export EXINIT

      HISTSIZE    历史记录数

      LOGNAME     当前用户的登录名 
      HOSTNAME    指主机的名称
      SHELL      前用户Shell类型
      PATH 保存进行命令或脚本查找的目录顺序。可以在.profile中进行设置。
      HOME 用于记录用户的主目录;
      PS1=‘[\u@\h \w]\$’ 基名
      IFS:用作shell指定的缺省域分隔符。

      LANGUGE     语言相关的环境变量,多语言可以修改此环境变量
      MAIL      当前用户的邮件存放目录 
      PS1       基本提示符,对于root用户是#,对于普通用户是$
      PS2       附属提示符,默认是“>”

二,变量的使用
(1) 例:当您在设置别名alias cdnet='cd /etc/sysconfig/network-scripts/',可您下次登录时就无法使用该别名
  重启系统后均会失效,此时可以在一些文件中进行设置
 此时您可在下面一些文件中进行设置,分为全局环境有效和局部环境有效
  全局环境:/etc/profile /etc/profile,d/* /etc/bashrc
  局部环境:~/.bash_profile ~/.bashrc ~/.bash_logout

 (2)profile类:
     设置环境变量
     运行用户登录要执行的一些命令
     bashrc类:
     设置别名
     设置本地变量
    
  (3)然而shell又分为:交互式登录shell,非交互式登录shell
       交互式登录shell时读取文件的顺序:
      /etc/profile-->/etc/profile.d/*-->~/.bash_profile-->~/.bashrc-->/etc/bashrc
 
      非登录式shell时读取文件的顺序:
      ~/.bashrc-->/etc/bashrc-->/etc/profile.d/*
 
 例:需要设置cds='cd /usr/local/src'只对root有用
   可以在root家目录下.bashrc设置
 
 例:设置环境变量FAVORCOLOR对全局有效
  在/etc/profile文件下设置export FAVORCOLOR=blue
  或在/etc/profile.d/*下新建文件设置export FAVORCOLOR=blue
  echo $FAVORCOLOR
  立即生效 :source /etc/profile
            或. /etc/profile
           
 练习1:让用户登录进来时候,显示,hi,i know you,you are root!
         可以在/etc/profile文件下设置echo "Hi,i know you,you are $LOGNAME!"
 

三,变量使用的技巧

(1)变量赋值时,等号左右不能有空格

(2)变量名称只能是字母与数字,且不能以数字开头

(3)若变量值存在空格,则必需以双引号或单引号包裹起来.

(4)对于特殊字符,单引号不能识别,而双引号可以识别

(5)"\"既可以作为跳转字符,也可以作为转义字符

(6)若变量要括增内容,应该使用双引号及$引用该变量

(7) 在一串指令中如果需要借助其他指令,可以使用`command`来嵌套(注意这里不是单引号,而是quote符号,也就是你的键盘上F1下面的那个按钮)

(8)取消变量使用unset
 
 由于是刚刚学习,不免有不足之处,欢迎您的不吝赐教!