1、管道符:"|"
用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等)
[root@localhost ~]# ls |wc -l11[root@localhost ~]# ls /etc/ |grep passwdpasswdpasswd-
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=39231HOSTNAME=localhostTERM=xtermSHELL=/bin/bashHISTSIZE=5000SSH_CLIENT=111.196.241.132 3908 52588SSH_TTY=/dev/pts/0USER=root
3.2:set 该命令不仅可以查看系统内置的环境变量,还可以查看用户自定义的变量:
[root@localhost ~]# set |head -10BASH=/bin/bashrce_fignore:histappend:interactive_comBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.dBASH_LINENO=()BASH_REMATCH=()BASH_SOURCE=()
3.3:自定义变量:
[root@localhost ~]# a=111 #字母开头定义变量:[root@localhost ~]# echo $a111[root@localhost ~]# _b=111 #下划线开头定义变量:[root@localhost ~]# echo $b456[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 $c123456789
注:多个变量进行叠加时:要对目标变量(等号右边)加上双引号,并且再对多个变量进行添加的写法:
不可以使用单用号:因为此处还要引用变量的值;
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 ~]# pstreesystemd─┬─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 ~]# whoroot pts/0 2018root 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 ~]#"这一部分所显示的内容:
可以带颜色显示:命令如下:
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 ~]#