前面已经和大家说了很多bash的特性,那我们接着和大家来说说其它特性:bash变量。

  说到变量,大家都很熟知,但是它的具体定义是什么呢?这里我们来说一下:变量,是一段有名称的连续的内存空间;这段内存空间的名称,称为变量名;在这段内存空间中存储的数据,则称为变量值。变量既然是一段有名称的内存空间,那么如果我们向一段内存空间(变量)中进行存储数据的过程,就被称为赋值操作;赋值符号通常为"="。

  在我们了解赋值之前,你需要知道变量的一些特性:

  1.变量是有类型之分的,比如:你想要将123赋值到变量中,如果以整型方式赋值,则为:01111011;如果以字符型来赋值:(1).以ASCII来赋值则需要占用三字节;(2).以UTF-8的话则需要占用9字节。也就是说,你以不同的类型来赋值,效果是不一样的。

  2.变量分为强变量以及弱变量:

    强变量:使用之前必须事先予以声明;必须声明变量类型;

    弱变量:在使用之前无需声明,无需指明变量类型;(bash变量)

  变量的赋值方法:VARNAME=VALUE,它的含义为:将某数值(VALUE)通过赋值操作(=)存储于特定的内存空间中(VARNAME);要想赋值,你得先有一个具体的变量名称,否则你把值赋到哪里呢?那么,bash中变量名称的命名是有一定规范的:

1.变量名只能以"_"或"字母"为起始字符,后面的其他字符可以是任意字母,数字或下划线;

2.变量名中的字母是大小写敏感的;

3.命名的书写格式:

全大写:HISTSIZE

全小写:myvar

驼峰式:MyNewVariable

连接式:My_New_Var

4.变量名要能做到见名知意;

5.变量名不能与已知变量或bash的内置变量重复;

  bash中的变量也有分类,按照变量的作用范围来划分,以及按照变量的声名方式。

根据变量的作用范围来划分:

  全局变量(环境变量):作用范围为整个shell进程,包括其子shell;

      本地变量:作用范围为当前登录时打开的shell进程,不包括其子shell;

  局部变量:作用范围仅仅只是当前程序段,一般用于函数;

根据变量的声明方式来划分:

  bash内置变量:

普通的内置变量:HISTSIZE,...

位置参数变量:$0, $1, $2, ...

特殊变量:$?, $#, $*, $@, $$, ...

  $?:展开为最近一次执行的命令的状态返回值(退出状态码);用以表示最近一次执行的命令是否成功执行;

  $#:不包括$0在内的其余的位置参数的个数,以十进制数字表示;

  $*:从$1开始展开为位置参数。当使用双引号引用展开的结果时,它展开为特殊变量IFS的第一个字符分隔的值;

  $@:从$1开始展开为位置参数。当使用双引号引用展开的结果时,它展开为单独的字符串;

  $$:展开为当前shell的进程标识符;

自定义变量:根据用户自己的需求来定义变量。

  那么咱们就趁热来说一说自定义变量,也就是变量的使用。你可以对变量进行声明,当然你所声明的变量都是自定义变量(这个自定义变量可以是全局变量,本地变量或者局部变量)。那么我们可以同过相关的操作来声明变量:

1.变量的声明与使用:

  1)声明全局变量

    export VARNAME

    export VARNAME=VALUE


     declare命令:

    declare - Set variable values and attributes.

    格式:declare [-aAfFgilrtux] [-p] [name[=value] ...]

    常用的选项:

    -a:声明索引数组(如果支持)

    -A:声明关联数组(如果支持)

    -i:声明整型变量

    -l:声明变量并将变量值中的字母转换为小写字母;

    -u:声明变量并将变量值中的字母转换为大写字母;

    -r:声明只读变量;该变量仅能进行一次赋值操作;

    -x:声明变量并将其导出为全局变量;

    declare -x VARNAME[=VALUE]

[root@localhost ~]# echo $MYVAR
[root@localhost ~]# export MYVAR='123'
[root@localhost ~]# echo $MYVAR
123
[root@localhost ~]# csh
[root@localhost ~]# echo $0
csh
[root@localhost ~]# echo $MYVAR
123
[root@localhost ~]# declare -x AVAR='234'
[root@localhost ~]# echo $AVAR
234
[root@localhost ~]# csh
[root@localhost ~]# echo $0
csh
[root@localhost ~]# echo $AVAR
234
[root@localhost ~]# echo $0
csh


  2) 声明本地变量:

    VARNAME=VALUE

[root@localhost ~]# echo $0
-bash
[root@localhost ~]# BVAR='345'
[root@localhost ~]# echo $0
-bash
[root@localhost ~]# echo $BVAR
345
[root@localhost ~]# csh
[root@localhost ~]# echo $0
csh
[root@localhost ~]# echo $BVAR
BVAR: Undefined variable.

 3) 声明局部变量:

        local VARNAME[=VALUE]


2.查看环境变量:

set命令:

 查看和改变shell属性的值及查看shell变量的变量名和变量值;

export命令:

 查看变量名称,也可以为变量赋值;

env命令:

 显示环境变量,不显示函数;


3.查看变量的值:

 echo ${VARNAME}


4.撤销变量的赋值及变量声明

 unset VARNAME

[root@localhost ~]# echo $BVAR
345
[root@localhost ~]# unset BVAR
[root@localhost ~]# echo $BVAR
BVAR: Undefined variable.



有关于保存变量的shell配置文件:

 通用配置文件:

    /etc/bashrc

    /etc/profile

    /etc/profile.d/*


 私人配置文件:

    ~/.bashrc

    ~/.bash_profile


注意:

    1.一般情况下,变量都是随用随声明,除非有必要,否则不建议修改配置文件的内容;

    2.声明的变量在使用完以后,最好使用unset命令予以撤销;