任务

6.管道符和作业控制 7.Shell变量上 8.Shell变量下 9.环境变量配置环境


管道符“|”:
作用:就是把前面命令的输出结果交到后面的命令
[root@localhost ~]# cat /etc/passwd | wc -l  #统计passwd下有多少行
20
[root@localhost ~]# cat /etc/passwd | grep root #grep 过滤指定的命令或者词
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin 

作业控制:
1. ctrl z: 暂停一个任务
[root@localhost ~]# vim tk.sh  #编辑这个文件后按CTRL+z  
[1]+  Stopped                 vim tk.sh
[root@localhost ~]# jobs      #查看编辑文件的状态
[1]+  Stopped                 vim tk.sh
2. jobs查看后台的任务
[root@localhost ~]# jobs
[1]   Stopped                 vim tk.sh
[2]-  Stopped                 vim hh.sh
3. bg[id]把任务调到后台并运行
[root@localhost ~]# jobs
[1]   Stopped                 vim tk.sh
[2]+  Stopped                 vim hh.sh
[3]-  Stopped                 vim aa.txt
[root@localhost ~]# bg 2
[2]+ vim hh.sh &
4. fg[id]把任务调到前台
[root@localhost ~]# sleep 100
^Z
[4]+  Stopped                 sleep 100
[root@localhost ~]# jobs
[1]-  Stopped                 vim tk.sh
[2]   Stopped                 vim hh.sh
[3]   Stopped                 vim aa.txt
[4]+ Stopped                 sleep 100
[root@localhost ~]# bg 4
[4]+ sleep 100 &
[root@localhost ~]# fg 4
sleep 100
5.命令后面加&直接丢到后台运行
[root@localhost ~]# sleep 100 &
[4] 1842
[root@localhost ~]# jobs
[1]+  Stopped                vim tk.sh
[2]   Stopped                 vim hh.sh
[3]   Stopped                 vim aa.txt
[4]-  Running                 sleep 100 &

变量
PATH,HOME,PWD,LOGNAME  #系统变量

env命令  #查看系统环境变量
[root@localhost ~]# env
XDG_SESSION_ID=1
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.0.10.1 54525 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=root

set查看系统内置变量 命令多了很多变量,并且包括用户自定义的变量
[root@localhost ~]# a=tk  #自定义变量
[root@localhost ~]# echo $a
tk
[root@localhost ~]# set |less  #查找看看是否能找到自定义的变量
HOSTNAME=localhost.localdomain
HOSTTYPE=x86_64
ID=0
IFS=$' \t\n'
LANG=en_US.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=17
...skipping...
a=tk

变量名规则:字母、数字下划线,首位不能为数字
[root@localhost ~]# a1=2
[root@localhost ~]# a_1=2
[root@localhost ~]# 1a=2   #这个变量就错了,所以要安装规则来命名
-bash: 1a=2: command not found

变量值有特殊符号时需要用单引号括起来
[root@localhost ~]# a=ab$c  #有特殊符号,如不没有添加单引号就会出现不能正确识别
[root@localhost ~]# echo $a
ab
[root@localhost ~]# a='ab$c'
[root@localhost ~]# echo $a
ab$c

变量的累加,注意,单引号是原样输出,双引号先计算在输出
[root@localhost ~]# a=1
[root@localhost ~]# b=2
[root@localhost ~]# echo $a$b
12
[root@localhost ~]# a='a$bc'
[root@localhost ~]# echo $a
a$bc
[root@localhost ~]# echo $a$b
a$bc2
[root@localhost ~]# c="a$bc"
[root@localhost ~]# echo $c
a
[root@localhost ~]# c="a$b"c
[root@localhost ~]# echo $c
a2c

全局变量,export b=2  只有在生成的在子脚本下面以及孙脚本才生效,意思就向下才生效,向上是不
生效的,怎么打开子脚本呢,直接bash就可以,在子shell下继续bash 就变成了孙shell,以此类推    
[root@localhost ~]# w
03:19:50 up  2:59,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.10.1        00:21    6.00s  1.47s  0.00s w
root     pts/1    10.0.10.1        03:02   14:14   0.03s  0.03s -bash
[root@localhost ~]# echo $SSH_TTY
/dev/pts/0
[root@localhost ~]# AK=linux
[root@localhost ~]# echo $AK
linux
[root@localhost ~]# bash
[root@localhost ~]# echo $AK  # 已经不生效了 ,那如何让其在子bash中生效呢 ,可以的,得用到全局
变量export  b=2  语法:export 变量名=变量值
[root@localhost ~]# export AK=linux
[root@localhost ~]# echo $AK
linux
[root@localhost ~]# pstree   #centos7 默认没有安装这个命令 安装方式使用命令yum install psmisc 即可
systemd─┬─NetworkManager─┬─dhclient
    │                └─2*[{NetworkManager}]
    ├─VGAuthService
    ├─abrt-watch-log
    ├─abrtd
    ├─agetty
    ├─anacron
    ├─auditd───{auditd}
    ├─crond
    ├─dbus-daemon───{dbus-daemon}
    ├─firewalld───{firewalld}
    ├─master─┬─pickup
    │        └─qmgr
    ├─polkitd───5*[{polkitd}]
    ├─rsyslogd───2*[{rsyslogd}]
    ├─sshd─┬─sshd───bash─┬─bash───bash───bash───pstree
    │      │             └─3*[vim]
    │      └─sshd───bash
    ├─systemd-journal
    ├─systemd-logind
    ├─systemd-udevd
    ├─tuned───4*[{tuned}]
    └─vmtoolsd───{vmtoolsd}
[root@localhost ~]# exit 退到上级bash 当推到父及bash的时候变量就用不了了
exit
[root@localhost ~]# echo $AK
[root@localhost ~]# 
注意:全局变量也只是用在当前终端上,要是在重新进入终端后是用不了的,退到父及bash后也用不了 

unset变量 取消变量 
[root@localhost ~]# tk=linux
[root@localhost ~]# echo $tk
linux
[root@localhost ~]# unset tk
[root@localhost ~]# echo $tk
[root@localhost ~]# 

环境变量配置文件       
/etc/profile 用户环境变量,交互登录才执行:用户登录是会用到,比如进入终端,输入密码等的时候会调用
/etc/bashrc 用户不用登录,执行shell就生效:用户执行命令的时候会用到
要编辑的话编辑用户家目录下编辑
 ~/.bashrc
 ~/.bash_profile  
 ~/.bash_history 用户历史命令
 ~/.bash_logout  用户退出的时候用 ,比如用户突出时删除用户历史命令
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
[root@localhost ~]# echo $PS1  #用户登录终端的时候会用到PS1 
[\u@\h \W]\$
PS2 ,在数据库里才用的 ,比如用户登录数据库的时候才会用到
[root@localhost ~]# echo $PS2
>

以上内容来自陶奎个人博客,初学者,欢迎一块交流: http://linuxstudying.cn https://blog.51cto.com/linuxstudying