1、管道符:"|"
用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等)
[root@localhost ~]# ls |wc -l
11
[root@localhost ~]# ls /etc/ |grep passwd
passwd
passwd-
2、作业控制: crtl+z fg bg jobs &
ctrl+z:暂停一个正在执行的任务:
fg [ id ]:把任务调到前台来运行:(foreground)
bg [ id ]:把任务调到后台来运行:(background)
jobs:查看当前正在运行的后台任务:
&:把任务一次性丢到后台去运行: sleep 1000 &
[root@localhost ~]# vim 1.txt #开启第一个后台任务:
[1]+ Stopped vim 1.txt
[root@localhost ~]# sleep 1000 #开启第二个后台任务:
^Z
[2]+ Stopped sleep 1000
[root@localhost ~]# jobs #查看当前的所有后台任务:
[1]- Stopped vim 1.txt
[2]+ Stopped sleep 1000
[root@localhost ~]# fg #把任务调到前台来,默认是调的后一个任务:
sleep 1000
^Z
[2]+ Stopped sleep 1000
[root@localhost ~]# bg 2 #把任务加载到后台去运行,后面可以跟id:
[2]+ sleep 1000 &
[root@localhost ~]# jobs #再次查看,发现第二个任务去后台运行了:
[1]+ Stopped vim 1.txt
[2]- Running sleep 1000 &
[root@localhost ~]# sleep 200 & #把任务自己丢到后台去运行,可以加”&“符号:
[3] 9519
[root@localhost ~]# jobs #再次查看后台运行的任务,如下:
[1]+ Stopped vim 1.txt
[2] Running sleep 1000 &
[3]- Running sleep 200 &
3、shell变量:
系统中的内置变量:PATH HOME PWD LOGNAME
3.1:env 只能查看系统内置的环境变量:
[root@localhost ~]# env #只能查看系统内置的环境变量:
XDG_SESSION_ID=39231
HOSTNAME=localhost
TERM=xterm
SHELL=/bin/bash
HISTSIZE=5000
SSH_CLIENT=111.196.241.132 3908 52588
SSH_TTY=/dev/pts/0
USER=root
3.2:set 该命令不仅可以查看系统内置的环境变量,还可以查看用户自定义的变量:
[root@localhost ~]# set |head -10
BASH=/bin/bashrce_fignore:histappend:interactive_com
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_REMATCH=()
BASH_SOURCE=()
3.3:自定义变量:
[root@localhost ~]# a=111 #字母开头定义变量:
[root@localhost ~]# echo $a
111
[root@localhost ~]# _b=111 #下划线开头定义变量:
[root@localhost ~]# echo $b
456
[root@localhost ~]# 3c=222 #不能以数字开头定义变量:
-bash: 3c=222: command not found
可知:变量名规则:大小写字母、数字、下划线(数字不能开头):
变量名如果有特殊符号(空格),需要加单引号:
单引号还可以脱义(特殊字符失去原有意义):如:$ 等:
[root@localhost ~]# a=1 #给变量a赋值:
[root@localhost ~]# b='$a' #给变量b赋予$a,并脱义:
[root@localhost ~]# echo $b
$a
3.4:变量累加:需要使用双引号:用来引用变量的值:
[root@localhost ~]# a=123 #给变量a赋予值123:
[root@localhost ~]# b=456 #给变量b赋予值456:
[root@localhost ~]# d="$C0" #此写法不合法,所有变量d不会变赋值:
[root@localhost ~]# echo $d
[root@localhost ~]# c="$a$b"789 #用双引号把变量引起来:
[root@localhost ~]# echo $c
123456789
注:多个变量进行叠加时:要对目标变量(等号右边)加上双引号,并且再对多个变量进行添加的写法:
不可以使用单用号:因为此处还要引用变量的值;
3.5、全局变量:export
export:在一个父shell中设定变量后,进入子shell后,变量不会生效,如果想让这个变量在子shell中生效,则要用到export声明一下才可以(跨终端不生效):
export 变量名=变量值 #声明一个变量:
[root@localhost ~]# a=123 #声明一个变量a=123
[root@localhost ~]# echo $a #在当前bash下查看这个变量:可生效:
123
[root@localhost ~]# bash #进入其子shell下:
[root@localhost ~]# echo $a #差这个变量,不生效:
[root@localhost ~]# pstree
systemd─┬─AliYunDun───15*[{AliYunDun}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash─┬─bash───pstree #此时看到在子shell下:
│ └─vim
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
赋予的变量值在子shell中不生效,需要用export声明一下:
[root@localhost ~]# export a=123 #用export声明变量a=123:
[root@localhost ~]# echo $a #在当前shell中查看:
123
[root@localhost ~]# bash #进入其子shell:
[root@localhost ~]# echo $a #在其子shell中查看也生效:
123
[root@localhost ~]# pstree
systemd─┬─AliYunDun───15*[{AliYunDun}]
├─aliyun-service
├─dbus-daemon
├─dhclient
├─ntpd
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash─┬─bash───pstree #查看到此时也是在子shell下:
│ └─vim
├─systemd-journal
├─systemd-logind
注:在父shell中声明的变量会在子shell中生效: 向下的:
但是在子shell中声明的变量在父shell中是不生效的:不可逆向上:
[root@localhost ~]# bash #首先进入一个子shell:
[root@localhost ~]# export c=111 #声明一个全局变量c=111:
[root@localhost ~]# echo $c #在当前子shell中查看变量c:
111
[root@localhost ~]# pstree #查看是在子shell下:
systemd─┬─AliYunDun───15*[{AliYunDun}]
├─AliYunDunUpdate───3*[{AliYunDunUpdate}]
├─sshd───sshd───bash─┬─bash───pstree
│ └─vim
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
[root@localhost ~]# exit #退出当前子shell,进入到上一级shell下:
exit
[root@localhost ~]# echo $c #查看发现$c变量为空:
[root@localhost ~]# pstree
systemd─┬─AliYunDun───15*[{AliYunDun}]
├─AliYunDunUpdate───3*[{AliYunDunUpdate}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash─┬─pstree #查看是在上一级shell下:
│ └─vim
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
#export全局变量自在当前shell及子shell中生效,不会在上一级shell中生效:
全局变量也自在当前终端中生效:另一终端下则不生效:
再次打开一个新的终端,如下命令查看自己所在终端下:
pstree所在行显示即为当前所在shell(exit可退出当前终端):
[root@localhost ~]# who
root pts/0 2018
root pts/1 2018
[root@localhost ~]# echo $SSH_TTY #查看当前终端:
/dev/pts/1
[root@localhost ~]# echo $c #会发现变量为空:不生效:
[root@localhost ~]# pstree
systemd─┬─AliYunDun───15*[{AliYunDun}]
├─AliYunDunUpdate───3*[{AliYunDunUpdate}]
├─sshd─┬─sshd───bash #第一个终端:
│ └─sshd───bash───pstree #第二个终端下执行的pstree:
├─systemd-journal
取消变量:
unset 变量名: #取消变量:
[root@localhost ~]# a=111 #给变量a赋予变量值111:
[root@localhost ~]# echo $a #查看变量:
111
[root@localhost ~]# unset a #取消变量:
[root@localhost ~]# echo $a
空白
注:没有pstree命令:安装:yum install -y psmisc
4、环境变量配置文件
环境变量配置文件可以划分为两个层次:系统环境变量配置文件和用户环境变量配置文件:
系统配置文件(严禁改动):
/etc/profile : 用户登录,交互时执行:PATH USER LOGNAME MAIL HISTSIZE等:
/etc/bashrc:用户执行shell即生效,无需登录, umask PS1:
用户配置爱文件:
~/.bashrc : 包含专属于自己的shell的bash信息,当登录或每次打开新的shell会被执行:别名:
~/.bash_profile:用户的个人化路径及环境变量的名称,该文件仅仅执行一次:
~/.bash_history:该文件用于记录命令历史:
~/.bash_logout :当退出shell时,会执行该文件,可以将一些清理工作放入到此文件下:
变量"PS1"
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
该变量用来定义"[root@localhost ~]#"这一部分所显示的内容:
可以带颜色显示:命令如下:
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
[root@localhost ~]# PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
root@localhost:~#echo $PS1
\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$
root@localhost:/etc/sysconfig# PS1='[\u@\h \W]\$ '
[root@localhost ~]#