24.管道符和做业控制 shell变量 环境变量配置文件

8.6 管道符和做业控制linux

8.7/8.8 shell变量shell

8.9 环境变量配置文件bash

 

8.6 管道符和做业控制:ssh

~cat 1.txt |wc -l ; cat 1.txt |grep 'aaa'.net

管道符前面的命令输出的结果给后面的命令进程

 

~ctrl z 暂停一个任务字符串

好比在编辑一个文件,想要查看磁盘空间,能够ctrl z暂停。fg能够把暂停的这个任务在调回来get

可暂停多个任务it

~jobs查看后台的任务ast

jobs能够把ctrl z的任务调出来,调出全部后台的任务

~bg[id]把任务调到后台

能够把一个正在执行的任务,搞到后台。

多个任务可后面加序号

不加序号就是执行最后一个

~fg[id]把任务调到前台

jobs可查看多个已中止的任务,fg 后面加序号,可回到这个序号的任务

不加序号,执行最后一个

~命令后面加&直接丢到后台

~两个终端是没法使用jobs查看的,但能够查看进程

 

---------------------------------------------------------------------------------------------------------------------------------------

 

8.7/8.8 shell变量:

 

~1.PATH,HOME,PWD,LOGNAME

~2.env命令

~3.set命令多了不少变量,而且包括用户自定义的变量

~4.自定义变量a=111

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

能够写a=1 或者a_1=1 又或者_a=1,可是不能写1=1

~6.变量值有特殊符号是须要用单引号括起来

例如空格,a=‘1 2 3’

~7.变量的累加,(重点,实例有介绍单引号、双引号的用法)

可累计查看 echo $a$b

双引号、单引号

~8.全局变量export b=2 (详细看实例)

bash生成一个子shell

exit返回上一个shell

在一个终端下设置的变量设置的,在另外一个下看不到的叫非全局变量或本地变量

全局变量只往下生效,子文件-子子文件这样生效。往上不生效,子文件不会影响父文件

也就是说,创建了1文件和2文件,1能使用2的变量,但2不能使用1的变量

运行子shell,直接运行bash

~9.unset变量

unset后面跟变量的名字,可取消名字

 

变量的名字一般是大写的英文字母

变量的值不必定是大写的

env可查看变量

set也可查看变量,也包括用户的变量,set通常是shell脚本

 

4.

咱们能够自定义用户的变量,就是PATH

[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost ~]# a=111

[root@localhost ~]# echo $a

111

[root@localhost ~]# set |grep '111'

_=111

a=111

固然不是系统内核的。他只在set里找到,也就是用户自定义的变量

 

5.

[root@localhost ~]# a=1

[root@localhost ~]# echo $a

1

[root@localhost ~]# a_1=1

[root@localhost ~]# echo $a_1

1

[root@localhost ~]# _a=1

[root@localhost ~]# echo $_a

1

[root@localhost ~]# 1=1

-bash: 1=1: 未找到命令

[root@localhost ~]# 2=a

-bash: 2=a: 未找到命令

 

6.

[root@localhost ~]# a=1 2 3

-bash: 2: 未找到命令

[root@localhost ~]# a='1 2 3'

[root@localhost ~]# echo $a

1 2 3

 

7.

[root@localhost ~]# a=1

[root@localhost ~]# b=2

[root@localhost ~]# echo $a$b 简单的能够直接写

12

[root@localhost ~]# a='a$bc' a=复杂的 用单引号括起来

[root@localhost ~]# echo $a$b 再次$a$b

a$bc2 a就表明了上边用单引号括起来的字符

[root@localhost ~]# c=a"$b"c 若是想要让c=$b的值,就要用双引号括起来

[root@localhost ~]# echo $c 因此他所表达出来的值,就是$b结果的值,而不是表明$b这个字符

a2c

 

8.

按 w 能够看到有几个登陆的

[root@localhost ~]# w

15:26:00 up 8 min, 2 users, load average: 0.01, 0.12, 0.12

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 192.168.159.1 15:19 0.00s 0.13s 0.04s w

root pts/1 192.168.159.1 15:25 23.00s 0.05s 0.05s -bash

登陆的 各分配了 分别从这个IP

都是root TTY 登过来

 

两个终端咱们分别看一下,各自的TTY

[root@localhost ~]# echo $SSH_TTY

/dev/pts/0 分别对应以上的TTY

[root@localhost ~]# echo $SSH_TTY

/dev/pts/1 分别对应以上的TTY

 

咱们在终端1上设置axin=linux这个变量,在终端2上是没有的

[root@localhost ~]# axin=linux

[root@localhost ~]# echo $axin

linux 终端1上定义,有这个变量

[root@localhost ~]# echo $axin

终端2上就没有

[root@localhost ~]#

 

shell自己是一个进程。咱们输入 bash,至关于进入另外一个终端。再w一下

[root@localhost ~]# bash

[root@localhost ~]# w 发现仍然在pts/0

15:38:11 up 20 min, 2 users, load average: 0.00, 0.01, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 192.168.159.1 15:19 3.00s 0.17s 0.02s w

root pts/1 192.168.159.1 15:25 3:47 0.05s 0.05s -bash

pstree一下,咱们linux上没有pstree这个命令,安装了psmisc

[root@localhost ~]# pstree

systemd─┬─NetworkManager───2*[{NetworkManager}]

├─VGAuthService

├─agetty

├─auditd───{auditd}

├─chronyd

├─crond

├─dbus-daemon───{dbus-daemon}

├─firewalld───{firewalld}

├─irqbalance

├─master─┬─pickup

│ └─qmgr

├─polkitd───5*[{polkitd}]

├─rsyslogd───2*[{rsyslogd}]

├─sshd─┬─sshd───bash───bash───pstree 咱们如今这这个位置,前面的bash是咱们刚打开的新 的bash,在他的基础上运行这个命令叫pstree

│ └─sshd───bash

├─systemd-journal

├─systemd-logind

├─systemd-udevd

├─tuned───4*[{tuned}]

└─vmtoolsd───{vmtoolsd}

咱们再运行echo $axin,发现也没有生效咱们以前设置的axin=linux

[root@localhost ~]# echo $axin

 

[root@localhost ~]#

咱们exit,退出刚才那个bash

[root@localhost ~]# exit

exit

[root@localhost ~]# echo $axin 发现有有了刚才设置的axin=linux

linux

像这样的叫为非全局变量,或者本地变量(load),仅仅在这个终端下生效

那怎么变成全局的呢:

[root@localhost ~]# export axin=linux 使用export

[root@localhost ~]# echo $axin

linux

[root@localhost ~]# bash 咱们再bash一个

[root@localhost ~]# echo $axin 就有了

linux

这个就叫作全局变量,也就是说在一开始的那个bash咱们设置了axin=linux,那么他的子bash或者子子bash都生效。

可是在另外一个终端下不会生效,例如,咱们再打开另外一个终端,pstree

[root@localhost ~]# pstree

systemd─┬─NetworkManager───2*[{NetworkManager}]

├─VGAuthService

├─agetty

├─auditd───{auditd}

├─chronyd

├─crond

├─dbus-daemon───{dbus-daemon}

├─firewalld───{firewalld}

├─irqbalance

├─master─┬─pickup

│ └─qmgr

├─polkitd───5*[{polkitd}]

├─rsyslogd───2*[{rsyslogd}]

├─sshd─┬─sshd───bash───bash───bash

│ └─sshd───bash───pstree 咱们在这,他跟上面的是并列关系,因此不会生效

├─systemd-journal

├─systemd-logind

├─systemd-udevd

├─tuned───4*[{tuned}]

└─vmtoolsd───{vmtoolsd}

演练了这么多,咱们得出一个结论。

因此,所谓的全局变量,是向下的。在这个shell的基础上生成子shell,子子shell等等,这样的话是生效的。不会向上的全局的!!

 

---------------------------------------------------------------------------------------------------------------------------------------

 

8.9 环境变量配置文件:

 

系统层次(这两个文件不要动):

~ /etc/profile 用户环境变量,交互,登陆才执行

咱们登陆才会执行。他会调用bashrc

~ /etc/bashrc 用户不用登陆,执行shell就生效

咱们执行shell就能够生效。bashrc是执行shell脚本的时候,用户不用登陆,就能够执行shell脚本,只要执行shell,他就会调用bashrc里面的一些配置

用户层次:

~ ~/.bashrc

~ ~/.bash_profile

~ ~/.bash_history

~ ~/bash_logout

用户退出的时候,须要作的一些操做

例如,让一个用户每次退出的时候都要删除他的命令历史。就能够把这个配置文件放到logout里面

~ ps1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'

ps1表示 [root@axinlinux-01 ~]# 。echo $ps1能够查看这些配置文件,都是能够改的。但日常不会 去动

后面的这些字符串是设置 [root@axinlinux-01 ~]# 的颜色

ps2表示 进入另外一个终端,例如MYSQL的时候所显示的。但仅仅是一个>

相关文章
相关标签/搜索