共计 1955 个字符,预计需要花费 5 分钟才能阅读完成。
1、普通环境变量与临时环境变量
1.1、定义普通环境变量
[root@localhost ~]# VAR=value
注意:左边的 VAR 是我们定义的一个变量名,右边则是一个值,我们通过把值赋值给一个变量,从而达到引用一个变量就相当于引用值的目的。一般上而言定义一个变量名也有命令法则,如下所示:
(1)、不能使用程序中的保留字,如 if、while、for、print 等字符串作为变量名
(2)、只能使用数字、字母、下划线,可以组合使用,但不能以数字开头
(3)、最好做到见名知意(建议这样子来做)
1.2、定义临时环境变量
[root@localhost ~]# export VAR=value
用法是一样的,只是我们这里加上了一个 export,普通环境变量和临时环境变量的区别就是:普通环境变量只在当前的 shell 终端有效,而临时环境变量则是在当前 shell 终端以及当前 shell 的子终端中有效。
1.3、变量引用
直接使用 $VAR 即可,比如下面这样,就可以把 $VAR 的值给打印出来。
[root@localhost ~]# echo $VAR
2、操作一下看看效果
[root@localhost ~]# tty
/dev/pts/0
[root@localhost ~]# ps axjf | grep pts/0
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1016 36123 36123 36123 ? -1 Ss 0 0:01 \_ sshd: root@pts/0
36123 36125 36125 36125 pts/0 33060 Ss 0 0:00 | \_ -bash
36125 33060 33060 36125 pts/0 33060 R+ 0 0:00 | \_ ps axjf
36125 33061 33060 36125 pts/0 33060 S+ 0 0:00 | \_ grep –color=auto pts/0
可以看到当前使用的终端是伪终端类型,序号为 pts/0。我们通过这个命令中,主要关注 PPID、PID、COMMAND 这三列,其中 PPID 表示父进程,PID 表示子进程,COMMAND 表示当前父进程执行的命令,
可以看出来当 SSH 连接 Shell 时,当前终端 PPID(-bash)是 sshd 守护程序的 PID(pts/0),因此在当前终端下的所有进程的 PPID 都是 -bash 的 PID(大家看到倒数第二行中 PID 号为 36125,他是 bash 进程的 PID 号,而我们执行的 ps 命令和 grep 命令则是的 PPID 都是 36125,这说明 ps 和 grep 都是 -bash 的子进程),比如执行命令、运行脚本。
所以当在 -bash 下设置的变量,只在 -bash 进程下有效,而 -bash 下的子进程 bash 是无效的,如果要在子进程中生效需要你使用 export,这样才有效
例如:
[root@localhost ~]# NUM=666
[root@localhost ~]# echo $NUM
666
[root@localhost ~]# bash ## 此时我又进入了子 shell 中
[root@localhost ~]# echo $NUM ## 发现是空值
然后我使用 export 定义一下
[root@localhost ~]# unset NUM ## 先接触一下环境变量,重新定义
[root@localhost ~]# export NUM=888
[root@localhost ~]# echo $NUM
888
[root@localhost ~]# bash ## 此时我又进入了子 shell 中
[root@localhost ~]# echo $NUM ## 子 shell 中也是可以使用这个值的
888
当然,上面的 export 例子也仅仅是对当前的终端以及子 shell 终端有效,如果你重新开一个新的终端,就不会生效了。比如之前我们使用的是 pts/0,现在重新开的窗口,其终端是 pts/1,那么 pts/ 1 这个终端中就没办法使用在 pts/ 0 中定义的变量了。
[root@localhost ~]# tty
/dev/pts/2
[root@localhost ~]# echo $NUM
此外,shell 脚本也是相当于起了一个子 shell 终端,因此我们在命令行中定义的 NUM 变量,即便在 shell 脚本中也是有效的,比如我们还是在 pts/ 0 这个终端上举例子:
[root@localhost ~]# tty
/dev/pts/0
[root@localhost ~]# cat bash.sh
#!/bin/bash
echo $NUM
[root@localhost ~]# bash bash.sh
666
声明:文章来源于网络,如有侵权请联系删除!