day02:管道符、shell及环境变量

本文深入解析Linux中管道符的使用,作业控制命令如ctrl+z、fg、bg、jobs的功能,以及shell变量的定义与操作,包括系统内置变量、自定义变量、变量累加、全局变量export的使用,环境变量配置文件的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 ~]#

 

转载于:https://my.oschina.net/yuanhaohao/blog/2990125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值