Shell脚本系列-shell入门第二讲

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

声明:文章来源于网络,如有侵权请联系删除!

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!