shell学习第二天 Shell脚本变量

环境变量用于定义Shell的运行环境,保证Shell命令的正确执行,Shell通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等,所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器、Shell脚本和各类应用,不像本地变量(只用于现在的Shell)。

环境变量可以在命令行中设置,但用户退出时这些变量值也会丢失,因此最好在用户家目录下的.bash_profile文件中或全局配置/etc/profile文件或者/etc/profile.d/中定义。将环境变量放入profile文件中,每次用户登录时这些变量值都将会被初始化。

环境变量可用在创建他们的shell和从该shell派生的任意子shell或者进程中。他们通常被称作全局变量以区别局部变量。通常,环境变量应该大写。环境变量是已经用export内置命令导出的变量。

自定义环境变量(全局变量)

格式:

1、export 变量名=value

2、变量名=value ; export 变量名

3、declare –x 变量名=value

以上为三种设置环境变量的方法

unset 环境变量  取消环境变量

set   查看环境变量

env  查看环境变量

局部变量:

本地变量在用户当前shell生存期的脚本中使用。例如:本地变量a取值为b,这个值只在用户当前shell生存期中有意义。如果在shell中启动另一个进程或退出,本地变量a的值将无效。

1、普通字符串变量定义

变量名=value

变量名=‘value’

变量名=“value”

例:

[root@localhost shell]# vi mm.sh 
      1 #!/bin/bash 
      2 a=192.168.1.2 
      3 b='192.168.1.2' 
      4 c="192.168.1.2" 
      5 echo "a=$a" 
      6 echo "b=$b" 
      7 echo "c=$c"
[root@localhost shell]# . mm.sh 
a=192.168.1.2 
b=192.168.1.2 
c=192.168.1.2

例2:

[root@localhost shell]# vi mm.sh 
      1 #!/bin/bash 
      2 a=192.168.1.2-$a 
      3 b='192.168.1.2-$a' 
      4 c="192.168.1.2-$a" 
      5 echo "a=$a" 
      6 echo "b=$b" 
      7 echo "c=$c"
[root@localhost shell]# . mm.sh 
a=192.168.1.2-192.168.1.2 
b=192.168.1.2-$a 
c=192.168.1.2-192.168.1.2-192.168.1.2

有关单引号、双引号与不加引号的简要说明如下:

单引号:

可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。

双引号:

把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后再输出最终内容来。

无引号:

把内容输出出来,会将含有空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后再输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以不加任何引号,不过最好用双引号替代。

例:

[root@localhost shell]# date1="today is `date`"   
[root@localhost shell]# date2='today is `date`'   
[root@localhost shell]# date3=today is `date`     
-bash: is: command not found 
[root@localhost shell]# echo $date1 
today is 2014年 03月 19日 星期三 08:05:15 CST 
[root@localhost shell]# echo $date2 
today is `date` 
[root@localhost shell]# echo $date3

结论:

无论定义变量还是输出变量,单引号,双引号,无引号的情况都和上面的说明一致的。

自定义变量的建议:

1)、纯数字,或简单字符串(不带空格),定义方式可以不加引号(单或双),例如:

a.m=33

b.m=yes

2)、没特殊情况,字条串一般用双引号定义,特别是多个字条串中间有空格时,例如:

m=”no load”

3)、变量内容需要原样输出时,要用单引号(‘ ’)

m=’date’

变量的命名规范

1) 变量命名要统一,使用全部大写字母,如APACHE_ERR_NUM;语义要清晰,能够正确的表达变量的含义,过长的英文单词可采用前几个字符代替。多个单词连接使用“_”号连接,引用时,最好以${APACHE_ERR_NUM}加大括号或”${APACHE_ERR_NUM”外面 加双引号方式引用变量,如果追求简单,方便就用$APACHE_ERR_NUM。

2) 避免含义字符或数字,例如下面的COUNT,并不知道其确切含义

例1:COUNT的不确切定义

COUNT=’grep keywords file’
if  [ ${COUNT} –ne 22]
then
          echo ‘Do Something’                  
fi

全局变量和局部变量命名

全局变量要一定要使用大写字母,语义要清晰,能够正确的表达变量的含义,过长的英文单词可采用前几个字符代替。多个单词连接使用“_”号连接。引用时,以${APACHE_ERR_NUM}方式或”${APACHE_ERR_NUM”方式引用。

局部变量命名:

local  变量名

总结:

1、尽量用有意义的字符串,推荐大写的方法,全部小写也可。

2、引用变量时,如果追求简单,方便就用$m,但是如果变量后面还有字符串就要用大括号把变量括起来,${m}m;

把一个命令作为变量

1、CMD=”`ls`”
2、CMD=$(ls)    推荐使用 因为反引号容易当成单引号,容易丢失,不易寻找
mkdir  `seq 5`
mkdir $(echo {a..f})
mkdir {a..f}
mkdir $(seq 100)
点赞