shell 变量、环境变量配置文件

 

一、set 和 envlinux

 

输入命令 env ,回车,能够获取到一些系统经常使用的变量信息,见下图,shell

系统的变量一般都是大写的英文字母,在等号左边,右边是变量的值。vim

PATH 决定了shell将到哪些目录中寻找命令或程序 HOME 当前用户主目录 HISTSIZE 历史记录数 LOGNAME 当前用户的登陆名 HOSTNAME 指主机的名称 SHELL 前用户Shell类型 LANG 语言相关的环境变量,多语言能够修改此环境变量 MAIL 当前用户的邮件存放目录 PWD 当前目录bash

env命令显示的变量只是环境变量,系统预设的变量其实还有不少,你可使用set命令把系统预设的所有变量都显示出来。ssh

除了 env 以外,还有一个命令 set ,回车,见下图,3d

内容较多,不一一截图。set 也能够查看变量,它不只仅查看系统内置的变量,还能够查看用户自定义的变量。里面的内容是一些 shell 脚本,看不懂不要紧,这边能够不用太关注的。blog

 

自定义一个变量,见下图,进程

这个和环境变量不太同样,不是系统内置的,是用户本身定义的变量。能够经过 set 查看,见下图,it

以为结果不太靠谱的话,能够用后面这个命令,搜索查找,输入 /a=1 ,回车,见下图,登录

能够看到 a=111 ,直接输入 :q ,回车,就能够退出。若是使用 env 的话就看不到了,见下图,

 

二、变量

 

系统的环境变量是系统内置的,咱们没有权限去干涉,固然能够经过修改配置文件去更改,可是通常状况下咱们也不会去更改的。咱们能够自定义本身的变量,在写 shell 脚本的时候,常常要使用变量。

先来讲说自定义变量的名字,变量名规则:字母、数字、下划线,首位不能为数字。举一些例子,见下图,

变量值有特殊符号时须要用单引号括起来,见下图,

那么双引号能够吗?见下图,

双引号也是能够的,但仍是建议使用单引号。为何呢?再举个例子,见下图,

从上图中能够看出,使用双引号的命令,结果是 a ,没有识别出双引号里面的 $ 。而使用单引号,结果就很是顺利,所有识别出来了。全部仍是建议使用单引号。

 

关于变量的累加,举例子,见下图,

上图打马赛克的位置是,命令手误输错,为了避免影响命令的连续性,仍是隐藏起来比较好。上图内容,一连串下来,就能够大概了解一下。$a$b表示累加,双引号里面的内容不是赋值,而是区分。当咱们赋值的变量表达式比较复杂的时候,尽可能用双引号或是单引号区别一下。想保留内容的话,就使用单引号,双引号表示内容的结果。

 

关于全局变量,见下图例子,

上图使用的是 PuTYY 终端,没法打开多个窗口,全部只有一个 TTY 。若是是 Xshell 上打开了多个窗口,就可使用命令 echo $SSH_TTY 来查看当前窗口的 TTY 。

如今自定义一个变量,见下图,

在 Xshell 里面的另外一个窗口中,输入命令 echo $lys ,结果是空的,表示没有这个变量。

接下来,再进入一个子 shell ,输入命令 bash 。shell 其实是一个进程,能够再打开一个 shell ,至关于又进入了另一个终端。虽然当前仍是在 pts/0 上,可使用命令 pstree 来查看,见下图,

上图红色框框的位置就是当前所在的位置,打开一个新的 bash ,而且运行了命令 pstree 。而 Xshell 上的结果不太同样,见下图,

sshd 表示终端,bash 表示进程。

接着上面的操做,这时候输入命令 echo $lys ,结果是空的,表示咱们自定义的变量仅仅在它的上一层 bash 中生效,见下图,

使用命令 exit ,能够退出当前的 bash ,返回上一层。能够看到变量 lys 又出现了。

通常咱们自定义的变量,仅仅在当前终端,当前 bash 下生效,并且仅此一次,重启系统以后就失效了。那么,咱们怎么操做,可使自定义的变量在全局范围生效?见下图,

export 表示全局环境变量,命令执行完毕以后,后面的子 shell 中,这个自定义变量 lys 都是生效的。再进入一个 bash ,见下图,

也能够看到,变量 lys 生效了。

有一个状况,这边要说明一下,export 适用的环境是当前 sshd 下的日后的全部子 bash ,跟它呈并列关系的其余两个 sshd ,自定义变量是不会生效的。若是是在 sshd 下的 bash 里自定义变量,跟它呈并列关系的其余 bash 里,这个变量也不会生效。

而且在当前 bash 里再往上一层,也不会看到变量。见下图,

说明 export 全局变量指的是向下的,向上是不生效的。后面写 shell 脚本的时候会用到。

变量能够赋值,也能够取消。见下图,

输入命令 unset lys ,就能够取消变量 lys 。

 

总结:

env         能够查看环境变量,仅限于一些系统内置的经常使用环境变量。

set          也是查看环境变量,不只能够查看系统内置的环境变量,还能够查看用户自定义的变量。

变量名规则:字母、数字、下划线,首位不能为数字。

变量值有特殊符号时须要用单引号括起来。

想保留内容的话,就使用单引号,双引号表示内容的结果。

echo $a$b             表示变量 a 和 b 的累加。

echo $SSH_TTY     能够查看当前窗口的 TTY

pstree                    能够查看当前位置

bash                      能够向下打开一个子 shell

export                   表示全局变量,向下生效,向上不生效,并列也不生效。

 

三、环境变量配置文件

 

 

本小节的内容分为两个层次,系统层次和用户层次。/etc/开头是系统层次,~/开头是用户层次。关于系统的文件 /etc/profile 和 /etc/bashrc ,这两个文件咱们不要去动。当咱们有一些需求要编辑这些文件的时候,能够编辑该用户下的家目录。

举个例子,输入命令 vim .bash_profile ,回车,见下图,

这里面作的更改,仅对该用户有效,要是打算全局生效的话,须要到 /etc/profile 里面去作更改。输入 :q ,回车,便可退出。注意上图中“. ~/.bashrc”前面的这个黄色的点,这个点和以前介绍过的 source 命令是同一个意思,加载的意思。咱们输入命令 vim .bash_profile 的时候,会自动调用 ~/.bashrc ,那咱们试着输入命令 vim .bashrc ,回车,见下图,

发现该命令自动调用了 /etc/bashrc ,输入 :q ,回车,退出。每一个用户家目录下都有以 . 开头的隐藏文件。

 

/etc/profile :这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等等。

/etc/bashrc :这个文件主要预设umask以及PS1。这个PS1就是咱们在敲命令时,前面那串字符了。

除了两个系统级别的配置文件外,每一个用户的主目录下还有几个这样的隐藏文件:

.bash_profile :定义了用户的我的化路径与环境变量的文件名称。每一个用户均可使用该文件输入专用于本身使用的shell信息,当用户登陆时,该文件仅仅执行一次。

.bashrc :该文件包含专用于你的shell的bash信息,当登陆时以及每次打开新的shell时,该该文件被读取。例如你能够将用户自定义的alias或者自定义变量写到这个文件中。

.bash_history :记录命令历史用的。

.bash_logout :当退出shell时,会执行该文件。能够把一些清理的工做放到这个文件中。

 

接着讲一下 PS1 ,它是在 /etc/bashrc 里面定义的,输入命令 vim /etc/bashrc ,回车,进入下图,

搜索 PS1 ,回车,见下图,

能够看到 PS1 。

接着看一下命令前缀 [root@lyslinux-01 ~]#  ,其中 root 就是当前登陆的用户名,@ 后面的 lyslinux 就是主机名,~ 就是所在的目录最后一层级。个人linux系统PS1就是[root@lyslinux-01 ~]#  , 来看一下PS1的值,输入命令 echo $PS1 ,回车,见下图,

\u 就是用户, \h 主机名, \W 则是当前目录,\$ 就是那个 ‘#’ 了,若是是普通用户则显示为‘$’。

上面大写的 W ,能不能改为小写的 w 呢?来试一下,见下图,

咱们能够看到,把 w 改为小写以后,命令前缀中的目录就变成绝对路径了。

接着试一下去掉方括号 [ ] ,见下图,

上图中 $ 表示普通用户,# 表示 root 用户。

为了方便区分,也能够设置带颜色显示,输入命令 PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$' ,回车,见下图,

 

以上就是 PS1 ,有了 PS1 ,也有 PS2 ,是另一种环境状态,见下图,

以上作个了解就能够。

相关文章
相关标签/搜索