您的位置:首页 > 运维架构 > Shell

L24 shell基础知识(二)管道符-作业控制-shell变量-环境变量配置文件

2017-10-27 14:50 1026 查看
主要内容:

1管道符

2作业控制

3 shell变量

4 环境变量配置文件



1管道符和作业控制

管道符 "|", 就是把前面的命令运行的结果丢给后面的命令。



2作业控制

当运行一个进程时,您可以使它暂停(按Ctrl+z),然后使用fg(foreground)命令恢复它,利用bg(background)命令使他到后台运行,也可以使它终止(按Ctrl+c)。



多个被暂停的任务会有编号,使用 jobs 命令可以看到两个任务,那么使用bg或者fg的时候,就需要在后面加一个编号了,使用 bg2 把第二个被暂停的任务丢到后台跑起来了,丢入后台需要使用在命令后边加一个 & 符号,中间有个空格。

但是 vi 似乎并不支持在后台运行,vmstat1 这个是用来观察系统状态的一个命令。



丢到后台还可以输入运行命令,只不过前台会显示。

丢到后台的任务如何关掉呢?如果没有退出刚才的shell, 那么先使用 fg编号把任务调到前台,然后使用 "Ctrl + c" 结束任务:

另一种情况则是,关闭到当前的shell, 再次打开另一个shell时,使用jobs命令并不会显示在后台运行或者被暂停的任务,要想停掉它的话,则需要先知道其pid, 然后使用kill命令杀死那个进程。



3 shell变量

环境变量PATH,这个环境变量就是shell预设的一个变量,通常shell预设的变量都是大写的。变量,说简单点就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据。

PATH就代替了所有常用命令的绝对路径的设定。因为有了PATH这个变量,所以运行某个命令时不再去输入全局路径,直接敲命令名即可。可以使用echo命令显示变量的值。



PATH 决定了shell将到哪些目录中寻找命令或程序

HOME 当前用户主目录

HISTSIZE 历史记录数

LOGNAME 当前用户的登录名

HOSTNAME 指主机的名称

SHELL 前用户Shell类型

LANG 语言相关的环境变量,多语言可以修改此环境变量

MAIL 当前用户的邮件存放目录

PWD 当前目录

使用 env 命令即可全部列出系统预设的全部系统变量了。不过登录的用户不一样这些环境变量的值也不一样。当前显示的就是root这个账户的环境变量了.

env命令显示的变量只是环境变量,系统预设的变量其实还有很多,可以使用set命令把系统预设的全部变量都显示出来,也可以连同用户自定义的变量显示出来。

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

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



虽然可以自定义变量,但是该变量只能在当前shell中生效。

使用 bash 命令即可再打开一个shell,此时先前设置的 "myname" 变量已经不存在了,退出当前shell回到原来的shell, "myname" 变量还在。



那要想设置的变量一直生效怎么办?有两种情况:

允许系统内所有用户登录后都能使用该变量。
需要在 "/etc/profile" 文件最末行加入 export myname=gregory 然后运行 source /etc/profile 就可以生效了。此时再运行bash命令或者直接 su - greg 账户可以看到效果。

2)只想让当前用户使用该变量

需要在用户主目录下的 .bashrc 文件最后一行加入 export myname=gregory 然后运行 source .bashrc 就可以生效了。这时候再登录greg2账户,myname变量则不会生效了。上面用的source命令的作用是,将目前设定的配置刷新,即不用注销再登录也能生效。





那么在linux下设置自定义变量有哪些规则呢?

设定变量的格式为 "a=b", 其中a为变量名,b为变量的内容,等号两边不能有空格;
变量名只能由英、数字以及下划线组成,而且不能以数字开头;

当变量内容带有特殊字符(如空格)时,需要加上单引号;

变量内容中本身带有单引号,这就需要用到双引号了。



如果变量内容中需要用到其他命令运行结果则可以使用反引号;



变量内容可以累加其他变量的内容,需要加双引号;

单引号和双引号的区别,用双引号时不会取消掉里面出现的特殊字符的本身作用(这里的$),而使用单引号则里面的特殊字符全部失去它本身的作用。



export其实就是声明一下这个变量的意思,让该shell的子shell也知道变量abc的值是123.如果export后面不加任何变量名,则它会声明所有的变量。



如果想取消某个变量怎么办?只要输入 unset 变量名 即可



4 环境变量配置文件

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

/etc/bashrc :这个文件主要预设umask以及PS1。这个PS1就是在敲命令时,前面那串字符了,例如我的PS1就是 [root@localhost ~]#, 我们不妨看一下PS1的值:



\u 就是用户, \h 主机名, \W 则是当前目录,\$ 就是那个 '#' 了,如果是普通用户则显示为 '$'.

[当前用户的账号名称@主机名的第一个名字 工作目录的最后一层目录名]#

编辑.bashrc:

vim .bashrc 

加入

PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\$"
保存退出。

重新加载bash配置文件:# source .bashrc

PS2的用法:就是一个>符号。用于输入shell代码。



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

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



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



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

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

知识补充:

【.bash_profile 与 .bashrc 的区别】

.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

【login shell 与 non-login shell 的区别】

1、当你直接在机器login界面登陆、使用ssh登陆或者su切换用户登陆时,.bash_profile 会被调用来初始化shell环境
Note:.bash_profile文件默认调用.bashrc文件
.bash_profile中有如下内容

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi


2、当你不登陆系统而使用ssh直接在远端执行命令,.bashrc 会被调用

3、当你已经登陆系统后,每打开一个新的Terminal时,.bashrc 都会被再次调用。

若要配置环境变量之类,最保险是写在 .bashrc 文件中。因为不管是登陆还是不登陆,该文件总会被调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐