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
声明:文章来源于网络,如有侵权请联系删除!