环境变量的功能---2

用 set 观察所有变量 (含环境变量与自定义变量) 
 

bash 可不只有环境变量喔,还有一些与 bash 操作接口有关的变量,以及用户自己定义的变量存在的。 那么这些变量如何观察呢?这个时候就得要使用 set 这个指令了。 set 除了环境变量之外, 还会将其他在 bash 内的变量通通显示出来哩!

[dmtsai@study ~]$ set 
BASH=/bin/bash                        <== bash 的主程序放置路径 
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu") 
BASH_VERSION='4.2.46(1)-release'      <== 这两行是 bash 的版本啊! 
COLUMNS=90                            <== 在目前的终端机环境下,使用的字段有几个字符长度 
HISTFILE=/home/dmtsai/.bash_history   <== 历史命令记录的放置文件,隐藏档 
HISTFILESIZE=1000                     <== 存起来(与上个变量有关)的文件之指令的最大纪录笔数。 
HISTSIZE=1000                         <== 目前环境下,内存中记录的历史命令最大笔数。 
IFS=$' \t\n'                          <== 预设的分隔符 
LINES=20                              <== 目前的终端机下的最大行数 
MACHTYPE=x86_64-redhat-linux-gnu      <== 安装的机器类型 
OSTYPE=linux-gnu                      <== 操作系统的类型! 
PS1='[\u@\h \W]\$ '                   <== PS1 就厉害了。这个是命令提示字符,也就是我们常见的 
                                          [root@www ~]# 或 [dmtsai ~]$ 的设定值啦!可以更动的! 
PS2='> '                              <== 如果你使用跳脱符号 (\) 第二行以后的提示字符也 
$                                     <== 目前这个 shell 所使用的 PID 
?                                     <== 刚刚执行完指令的回传值。 
... 
# 有许多可以使用的函式库功能被鸟哥取消啰!请自行查阅! 

不论是否为环境变量,只要跟我们目前这个 shell 的操作接口有关的变量, 通常都会被设定为大写字符,也就是说,『基本上,在 Linux 预设的情况中,使用{大写的字母}来设定的变量一般为系统内定需要的变量』。 

上头那些变量当中,有哪些是比较重要的?大概有这几个吧! 

 $:(关于本 shell 的 PID) 
<---每打开一个终端标签页,就对应一个新的线程代号。

钱字号本身也是个变量喔!这个咚咚代表的是『目前这个 Shell 的线程代号』,亦即是所谓的 PID 
(Process ID)。 想要知道我们的 shell 的 PID ,就可以用:『 echo $$ 』即可!出现的数字就是你的 PID 号码。 


 ?:(关于上个执行指令的回传值) 

 这个变数是:『上一个执行的指令所回传的值』, 上面这句话的重点是『上一个指令』与『回传值』两个地方。当我们执行某些指令时,这些指令都会回传一个执行后的代码。一般来说,如果成功的执行该指令, 则会回传一个 0 值,如果执行过程发生错误,就会回传『错误代码』才对!一般就是以非为 0 的数值来取代。 
 

[dmtsai@study ~]$ echo $SHELL 
/bin/bash                                  <==可顺利显示!没有错误! 
[dmtsai@study ~]$ echo $? 
0                                          <==因为没问题,所以回传值为 0 
[dmtsai@study ~]$ 12name=VBird 
bash: 12name=VBird: command not found... <==发生错误了!bash 回报有问题 
[dmtsai@study ~]$ echo $? 
127 <==因为有问题,回传错误代码(非为 0) 
# 错误代码回传值依据软件而有不同,我们可以利用这个代码来搜寻错误的原因喔! 
[dmtsai@study ~]$ echo $? 
0 
# 咦!怎么又变成正确了?这是因为 "?" 只与『上一个执行指令』有关, 
# 所以,我们上一个指令是执行『 echo $? 』,当然没有错误,所以是 0 没错!

OSTYPE, HOSTTYPE, MACHTYPE:(主机硬件与核心的等级) 
 

[root@zhazha cici]# set |grep OSTYPE
OSTYPE=linux-gnu
    [[ $OSTYPE == *linux* ]] && var=_$var;
[root@zhazha cici]# set |grep HOSTTYPE
HOSTTYPE=x86_64
[root@zhazha cici]# set |grep MACHTYPE
MACHTYPE=x86_64-redhat-linux-gnu