目录
1、用户自定义变量
2、位置变量
3、预定义变量
4、环境变量(一次性全局变量)
5、永久全局变量(重启以后依然存在的变量)
(1) 本地变量文件
(2) 全局变量文件
1、用户自定义变量
定义变量: 变量名=value
读取变量内容:$变量名 或者 ${变量名}
删除变量: unset 变量名
变量命名:
- 建议使用大写来和命令区分开,比如 test、echo、ls等命令都是小写
- 字符串要用引号
// variable.sh
NAME='gzx'
AGE=17
echo name: $NAME and age: $AGE
unset NAME
测试脚本的时候,需要给脚本添加运行权限,如果你是这个.sh文件的创建者,在命令行输入下面两者中的一种
# 如果是可以创建者、组、其他都加上执行权限
chmod a+x variable.sh
# 如果只是给创建者加上执行权限
chmod u+x variable.sh
测试结果如下:
2、位置变量
位置变量不需要显式去定义变量名,其实是根据命令行参数的位置来读取对应的内容的。Shell脚本的内容如下:
# 打印两个命令行参数的内容
# $1 表示引用命令行参数的第一个参数
# $2 表示引用命令行参数的第二个参数
echo first param: $1 and second param: $2
命令行输入如下:
./variable.sh gzx 17
3、预定义变量
预定义变量指的是系统已经内置了一些变量,我们只需要直接使用 $符号来引用。常见预定义变量的引用如下:
- $0 脚本名
- $* 所有的命令行参数
- $@ 所有的命令行参数
- $# 命令行参数的个数
- $$ 当前进程的PID
- $! 上一个后台进程的PID(命令行指令 & 表示让进程后台运行)
- $? 上一个命令的返回值,0代表成功
# variable.sh
echo '脚本名:'$0
echo '参数的个数:'$#
echo '当前进程的PID:'$$
echo '上一个命令的返回值:'$?
# 命令行输入
linux@linux:~/Templates$ ./variable.sh aaa bbb
脚本名:./variable.sh
参数的个数:2
当前进程的PID:3436
上一个命令的返回值:0
4、环境变量(一次性全局变量)
环境变量在父Shell中可以被使用,在子Shell中也可以被使用(子Shell会拷贝父Shell的环境)。需要注意的是,环境变量仅仅只是本次登录有效,重启以后,环境变量会消失。
- 语法格式:export 变量名=value
- 引用环境变量:$变量名 或者 ${变量名}
下面来测试一下环境变量是否在任何地方都可以被使用,首先在家目录下添加一个环境变量
linux@linux:~$ export NAME='gzx'
然后换一个目录,在命令行打印环境变量
linux@linux:~/Templates$ echo $NAME
gzx
修改 之前的.sh脚本来打印环境变量
# variable.sh
echo $NAME
# 命令行输入
linux@linux:~/Templates$ ./variable.sh
gzx
5、永久全局变量(重启以后依然存在的变量)
Linux环境下的变量类型大致有三种,分别是本地变量、全局变量以及用户自定义的变量
- 本地变量:只有当前用户可以使用的变量,保存在家目录下的 .bash_profile、.bashrc 文件中
- 全局变量:所有用户都可以使用的变量,保存在 /etc/profile、/etc/bashrc 文件中
当变量直接写入本地变量文件或者全局变量文件的时候,此时即便是重启虚拟机,这个变量也会一直存在。下面介绍一下本地变量和全局变量的写入方式
(1) 本地变量文件
向 家目录下的 .bashrc 中写入一个变量NAME
# .bashrc 文件
NAME='gzx'
(2) 全局变量文件
向 /etc/profile 文件中写入一个变量NAME
# .bashrc 文件
export NAME='gzx'