任务
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