shell 变量_第1张图片

1、set 和 env

输入命令 env ,回车,可以获取到一些系统常用的变量信息,见下图,
shell 变量_第2张图片
系统的变量通常都是大写的英文字母,在等号左边,右边是变量的值。
PATH 决定了shell将到哪些目录中寻找命令或程序 HOME 当前用户主目录 HISTSIZE 历史记录数 LOGNAME 当前用户的登录名 HOSTNAME 指主机的名称 SHELL 前用户Shell类型 LANG 语言相关的环境变量,多语言可以修改此环境变量 MAIL 当前用户的邮件存放目录 PWD 当前目录
env命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用set命令把系统预设的全部变量都显示出来。
除了 env 之外,还有一个命令 set ,回车,见下图,
shell 变量_第3张图片
内容较多,不一一截图。set 也可以查看变量,它不仅仅查看系统内置的变量,还可以查看用户自定义的变量。里面的内容是一些 shell 脚本,看不懂没关系,这边可以不用太关注的。

自定义一个变量,见下图,
shell 变量
这个和环境变量不太一样,不是系统内置的,是用户自己定义的变量。可以通过 set 查看,见下图,
shell 变量
觉得结果不太靠谱的话,可以用后面这个命令,搜索查找,输入 /a=1 ,回车,见下图,
shell 变量_第4张图片
可以看到 a=111 ,直接输入 :q ,回车,就可以退出。如果使用 env 的话就看不到了,见下图,
shell 变量_第5张图片

2、变量

系统的环境变量是系统内置的,我们没有权限去干涉,当然可以通过修改配置文件去更改,但是一般情况下我们也不会去更改的。我们可以自定义自己的变量,在写 shell 脚本的时候,经常要使用变量。
先来说说自定义变量的名字,变量名规则:字母、数字、下划线,首位不能为数字。举一些例子,见下图,
shell 变量_第6张图片
变量值有特殊符号时需要用单引号括起来,见下图,
shell 变量_第7张图片
那么双引号可以吗?见下图,
shell 变量
双引号也是可以的,但还是建议使用单引号。为什么呢?再举个例子,见下图,
shell 变量_第8张图片
从上图中可以看出,使用双引号的命令,结果是 a ,没有识别出双引号里面的 $ 。而使用单引号,结果就非常顺利,全部识别出来了。所有还是建议使用单引号。

关于变量的累加,举例子,见下图,
shell 变量_第9张图片
上图打马赛克的位置是,命令手误输错,为了不影响命令的连续性,还是隐藏起来比较好。上图内容,一连串下来,就可以大概了解一下。$a$b表示累加,双引号里面的内容不是赋值,而是区分。当我们赋值的变量表达式比较复杂的时候,尽量用双引号或是单引号区别一下。想保留内容的话,就使用单引号,双引号表示内容的结果。

关于全局变量,见下图例子,
shell 变量_第10张图片
上图使用的是 PuTYY 终端,无法打开多个窗口,所有只有一个 TTY 。如果是 Xshell 上打开了多个窗口,就可以使用命令 echo $SSH_TTY 来查看当前窗口的 TTY 。
现在自定义一个变量,见下图,
shell 变量
在 Xshell 里面的另一个窗口中,输入命令 echo $lys ,结果是空的,表示没有这个变量。
接下来,再进入一个子 shell ,输入命令 bash 。shell 实际上是一个进程,可以再打开一个 shell ,相当于又进入了另外一个终端。虽然当前还是在 pts/0 上,可以使用命令 pstree 来查看,见下图,
shell 变量_第11张图片
上图红色框框的位置就是当前所在的位置,打开一个新的 bash ,并且运行了命令 pstree 。而 Xshell 上的结果不太一样,见下图,
shell 变量_第12张图片
sshd 表示终端,bash 表示进程。
接着上面的操作,这时候输入命令 echo $lys ,结果是空的,表示我们自定义的变量仅仅在它的上一层 bash 中生效,见下图,
shell 变量_第13张图片
使用命令 exit ,可以退出当前的 bash ,返回上一层。可以看到变量 lys 又出现了。
一般我们自定义的变量,仅仅在当前终端,当前 bash 下生效,而且仅此一次,重启系统之后就失效了。那么,我们怎么操作,可以使自定义的变量在全局范围生效?见下图,
shell 变量
export 表示全局环境变量,命令执行完毕之后,后面的子 shell 中,这个自定义变量 lys 都是生效的。再进入一个 bash ,见下图,
shell 变量_第14张图片
也可以看到,变量 lys 生效了。
有一个情况,这边要说明一下,export 适用的环境是当前 sshd 下的往后的所有子 bash ,跟它呈并列关系的其他两个 sshd ,自定义变量是不会生效的。如果是在 sshd 下的 bash 里自定义变量,跟它呈并列关系的其他 bash 里,这个变量也不会生效。
shell 变量_第15张图片
并且在当前 bash 里再往上一层,也不会看到变量。见下图,
shell 变量_第16张图片
说明 export 全局变量指的是向下的,向上是不生效的。后面写 shell 脚本的时候会用到。
变量可以赋值,也可以取消。见下图,
shell 变量
输入命令 unset lys ,就可以取消变量 lys 。

总结:
env 可以查看环境变量,仅限于一些系统内置的常用环境变量。
set 也是查看环境变量,不仅可以查看系统内置的环境变量,还可以查看用户自定义的变量。
变量名规则:字母、数字、下划线,首位不能为数字。
变量值有特殊符号时需要用单引号括起来。
想保留内容的话,就使用单引号,双引号表示内容的结果。
echo $a$b 表示变量 a 和 b 的累加。
echo $SSH_TTY 可以查看当前窗口的 TTY
pstree 可以查看当前位置
bash 可以向下打开一个子 shell
export 表示全局变量,向下生效,向上不生效,并列也不生效。