默认情况下,Bash shell是一种无类型的脚步语言,除非用declare特别声明,否则它不会区分一个变量是整数变量、浮点数变量还是字符串变量。在Bash shell中所有的变量都被看成是字符串,使用时也不需要进行声明。

1、变量的命名

bash shell中变量的命名规则和C语言相同,必须是由英文字母、数字及下划线组成,第一个字符必须是字母或下划线,变量的长度没有限制,但英文字母区分大小写。虽然,bash shell中使用变量时不需要声明,但还是提倡对一些重要的变量进行声明、添加注释,以便阅读和维护。声明或创建一个变量之后,它的作用域是当前shell,子shell无法获取父shell中定义的变量,除非该变量时环境变量。

2、设定变量

在bash shell中要设置某个变量的值是很容易的,只需要按照:

变量名称=值

的方式即可改变某个变量的值,需要注意的是等号的两边是不能有空格的,若值中含有空格的话,需要用引号括起来。

3、获取变量值

要获取某个变量的值只需要在该变量的名称前面加上$或用${}将变量括起来即可。

# echo $PATH

# echo ${PATH}

4、取消与清空变量

当你不再需要某个变量时,你可能想取消该变量,即将该变量从当前名字空间中删除并释放该变量所占用的内存。在bash shell中可以用unset命令来取消某个变量。用法如下:

unset 变量名称 或 unset -v 变量名称

-v表示取消变量,unset除了可以用来取消变量外,还可以用来取消函数,用unset来取消函数时,用法如下:

unset -f 函数名称

使用unset以后,变量就不复存在了,这可能并不是你想要的,你可能只是想将清除该变量中的值,使其为null,即清空变量,清空变量的操作如下:

变量名称=

5、环境变量

只有当一个变量成为环境变量时,它才能为子shell所用,为了使一个变量成为环境变量,需要使用export命令,具体如下:

变量名称=”xxxx”

export 变量名称 

export 变量名称=”xxxx”

除了使用export之后,还可以在声明的时候就将变量指定为环境变量,如下:

declare -x 变量名称

6、bash的内置变量

除了环境变量和用户自定义的变量之外,bash shell中还会用到很多的内置变量,下面介绍一些常用的内置变量。

BASH — bash的完整路径,通常是/bin/bash

BASH_VERSION — bash的版本

BASH_ENV — 在非交互模式下,会先检查$BASH_ENV是否有指定的启动文件,如果有则先执行它

ENV — 与BASH_ENV类似,不过是在POSIX模式下,会先检查$ENV是否有指定的启动文件,如果有则先执行它

CDPATH — cd命令的搜索路径

PATH — 命令的搜索路径

EUID — 有效的用户id

FUNCNAME — 在函数执行期间,即为函数的自身的名称

HOSTNAME — 主机名

HOSTTYPE — 主机类型,如i386

OSTYPE — 执行bash的操作系统类型,如linux-gnu

HOME — 用户主目录

IFS  —  默认的字段分隔符

OPTARG — 使用getopts处理选项时,取得的选项的参数

OPTIND — 使用getopts处理选项时,选项的索引值

OPTERR — 若将OPTERR设置为1,则getopts发生错误,输出错误信息

$1~$n — 位置参数,即传入程序或函数的参数,$1即第一个参数,$2为第二个参数,其他类推

$* —   所有的位置参数,并将其看成一个字符串,如”test.sh abc 123“,则$*为”abc 123“

$@ —  所有的位置参数,并将其看成一个字符串数组,如”test.sh abc 123“,则$*为”abc 123“

$# —  位置参数的个数

$? —  上一条命令执行结束后的返回值

$$ —  当前bash shell的进程号

$! —  上一个后台程序的进程号

7、调整变量的属性

declare命令不仅可以用来声明变量,还可以用来调整变量的属性,具体用法如下:

-p  显示变量的属性

-a  变量是一个数组

-i   变量是一个整数

-r  变量为只读的

-x  变量为环境变量