1.  什么是变量
(1) 良好的程序设计员都会善用变量,便于控制与修改
(2) PATH、HOME、MAIL等系统环境变量,用户环境变量
(3) 变量是一组文字或者符号,用来取代一些设定或者一串保留的数据。
2. echo查看变量内容
[root@localhost ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $MAIL
/var/spool/mail/root
 
[root@localhost ~]# MYNAME=amao //定义变量,无空格
[root@localhost ~]# echo $MYNAME
amao
3. env查看系统预设变量内容(一般大写)
[root@localhost kernel]# env   //查看环境变量

[root@localhost kernel]# env
HOSTNAME=localhost.localdomain
TERM=xterm
SHELL=/bin/bash
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
MAIL=/var/spool/mail/root  //mailbox位置
PWD=/lib/modules/2.6.18-164.el5/kernel
INPUTRC=/etc/inputrc
LANG=en_US.UTF-8
HOME=/root    //家目录,可以用cd或者cd ~到达
_=/bin/env
4. set  显示系统全部变量 //包括用户自己定义的临时变量
[root@localhost ~]# set 
BASH=/bin/bash
.....
PS1 PS1='[\u@\h \W]\$ '   //设定了命令提示符的格式 PS1
[root@localhost ~]#
.....
[root@localhost ~]# echo $$  // 查看shell的PID(Process ID):$
 4137
.....
5. 上个指令的返回值 ?
[root@localhost ~]# cd /home
[root@localhost home]# echo $? //执行成功,return值是0
 0
[root@localhost ~]# 12NAME=amao
bash: 12NAME=amao: command not found
[root@localhost ~]# echo $? //执行失败,return值是非0
127
6. 变量定义规则
[root@localhost ~]# name="amao's dog"  //有空格,需要"或'
[root@localhost ~]# name=amao\'s\ dog   //空格、'、回车等可以用\转义
 
[amao99@localhost ~]$ PATH=$PATH:/home/amao99/bin //PATH为扩充便令,需要加$,并用:隔开
[amao99@localhost ~]$ PATH="$PATH":/home/amao99/bin //同上,加""

[root@localhost ~]# name=root  
[root@localhost ~]# name="$name"dog //变量引用
[root@localhost ~]# name=${name}cat
[root@localhost ~]# echo $name
rootdogcat

[root@localhost ~]# bash   //开启一个子程序
[root@localhost ~]# echo $name //变量没有export,所以看不到
 
[root@localhost ~]# exit   //推出子程序
exit
[root@localhost ~]# export name   //export
[root@localhost ~]# bash               //再重开子程序
[root@localhost ~]# echo $name  
rootdogcat

[root@localhost ~]# cd /lib/modules/`uname -r`/kernel  // 命令引用,用1前面的`,不是'
[root@localhost kernel]# pwd
/lib/modules/2.6.18-164.el5/kernel
[root@localhost kernel]# ll `locate crontab` //详细列出位置 ` `先执行

[root@localhost kernel]# unset name  //取消变量设定

单双引号的不同
[root@localhost kernel]# name=amao
[root@localhost kernel]# myname="my name is $name" //"知晓变量
[root@localhost kernel]# echo $myname
my name is amao
[root@localhost kernel]# myname='my name is $name'  //'把其当普通字符
[root@localhost kernel]# echo $myname
my name is $name

变量与变量内容以等号『=』来连结;
等号两边不能直接接空格符;
变量名称只能是英文字母与数字,但是数字不能是开头字符;
若有空格符可以使用双引号『 " 』或单引号『 ' 』来将变量内容结合起来,但须要特别留意,双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符;
必要时需要以跳脱字符『 \ 』来将特殊符号(如Enter, $, \, 空格符, '等)变成一般符号;
在一串指令中,还需要藉由其它的指令提供的信息,可以使用 quote 『 ` command` 』;
若该变量为扩增变量内容时,则需以双引号及 $变量名称如:『 "$PATH":/home』继续累加内容;
若该变量需要在其它子程序执行,则需要以 export 来使变量可以动作,如『export PATH』;
通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断(纯粹依照使用者兴趣与嗜好);
取消变量的方法为:『unset 变量名称』。

7. 变量的用途
简化路径名,定义长路径名为road变量 cd $road
在shell脚本中定义,多次引用,修改非常方便
8. export 将自定义变量设定为环境变量 
[root@localhost home]# echo
[root@localhost home]# echo $PATH
[root@server1 ~]# export
由前面的 export 以及相关的说明,你可以很清楚的知道一件事情,那就是,『变量的设定只在目前这个 shell 环境当中存在,在下个或者是在子程序中 ( 子 shell ) 将不会存在!』要让变量在下个程序也可以继续的使用,大概就是使用 export 这个咚咚啦!此外,其实除了 shell 的父、子程序外,在脚本( scripts )的编写当中,由于有的软件会使用到 2 个以上的 scripts 做为一个完整的套件!也就是说,假如你有两支程序,一支为 scripts1.sh 以及 scripts2.sh ,而 scripts2.sh 会去引用 scripts1.sh 的变数,这个时候,嘿嘿!你在 scripts1.sh 当中设定的变量请『千万记得以 export 设定』,否则你的变量将无法在两个 scripts 之间互相被引用喔!当这个 scripts 执行完毕之后,刚刚在 scripts 当中设定的变量也就『失效了!』。
9. unset //变量取消
[root@server1 ~]# name=amao
[root@server1 ~]# export name
[root@server1 ~]# echo $name
amao
[root@server1 ~]# unset name
[root@server1 ~]# echo $name