3. 局部变量和环境变量

局部变量

局部变量是只能在当前 Shell 内使用的变量,此变量不能传递给自己的子进程。

环境变量(全局变量)

环境变量也称全局变量,是可以被自己的子进程继承和使用的变量。

创建和修改局部变量的语法

变量名=

创建和修改环境变量的语法

export 变量名=
变量名=export 变量名

如:

weimingze@mzstudio:~$ lvar="我是局部变量"
weimingze@mzstudio:~$ export gvar="我是环境变量"
weimingze@mzstudio:~$ gvar2="我是环境变量2"
weimingze@mzstudio:~$ export gvar2
weimingze@mzstudio:~$ echo "lvar=${lvar} gvar=${gvar} gvar2=${gvar2}"
lvar=我是局部变量 gvar=我是环境变量 gvar2=我是环境变量2

测试局部变量和全局变量的取值

编写 test_var.sh 文件并写入如下内容:

#!/bin/bash

echo "lvar=${lvar}"
echo "gvar=${gvar}"
echo "gvar2=${gvar2}"

添加读取和执行权限

weimingze@mzstudio:~$ chmod +rx test_var.sh

在此 bash 内执行

weimingze@mzstudio:~$ source test_var.sh
lvar=我是局部变量
gvar=我是环境变量
gvar2=我是环境变量2
weimingze@mzstudio:~$ . test_var.sh
lvar=我是局部变量
gvar=我是环境变量
gvar2=我是环境变量2

在新的 bash 进程内执行

weimingze@mzstudio:~$ bash test_var.sh
lvar=
gvar=我是环境变量
gvar2=我是环境变量2
weimingze@mzstudio:~$ ./test_var.sh
lvar=
gvar=我是环境变量
gvar2=我是环境变量2

可见局部变量没有传递给子进程。

查看所有环境变量

printenv 命令用来打印所有的环境变量。如:

weimingze@mzstudio:~$ printenv
SHELL=/bin/bash
PWD=/home/weimingze
LOGNAME=weimingze
HOME=/home/weimingze
LANG=C.UTF-8
USER=weimingze
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
gvar=我是环境变量
gvar2=我是环境变量2
...

说明

环境变量
值说明
SHELL
当前使用的 Shell。
PWD
当前工作路径。
LOGNAME
当前登录用户名。
HOME
当前的用户主目录。
LANG
当前使用的语言。
USER
用户名。
PATH
命令的搜索路径列表,用英文的 冒号 : 分隔。
gvar
自定义环境变量。
...
其他(略)。

练习:

  1. 写个 Shell 脚本程序文件 test.sh,要求打印如下信息:
    • 打印当前用户的名称
    • 打印当前用户的家文件夹(家目录)。
    • 打印当前工作路径
    • 打印当前用户使用的Shell。
  2. 运行次 test.sh 脚本程序文件。