Shell基础知识 (2) 之 管道符和作业控制、变量、环境变量配置文件

8.6 管道符和作业控制

1. 管道符“|”

管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

cat 1.txt | wc -l  
cat 1.txt |grep 'aaa'
find ./ -type f | wc -l

2. 作业控制

2.1 作业和进程的区别

进程和作业的概念也有区别。一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程。

2.2 作业控制

作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意地挂起进程或重新启动进程。作业控制是许多shell(包括bash和tcsh)的一个特性,使用户能在多个独立作业间进行切换。

  • 使用 Ctrl + z 停止进程并放到后台
vim 1.txt
[1]+  已停止              vim 1.txt
vim aa.txt
[2]+  已停止              vim aa.txt
  • 使用jobs命令查看后台所有运行的进程
jobs
[1]-  已停止              vim 1.txt
[2]+  已停止              vim aa.txt
  • 使用fg[id号]将任务调到前台
fg 1
  • 再查看进程
jobs
[1]+  已停止              sleep 200
[2]-  运行中              sleep 100 &
  • 使用bg[id号]将任务调到后台,如果进程还在不断刷新运行的话,其实进程没有停止
bg 1                    
[1]+ vim 1.txt &

[1]+  已停止              vim 1.txt

  • 使用sleep停止
sleep 1000    停止1000秒

jobs
[1]  已停止              vim 1.txt
[2]  已停止              vim aa.txt
[3]-  已停止              sleep 1000

8.7/8.8 shell变量

1. 变量

在shell中有3种变量:系统变量,环境变量和用户自定义变量,其中系统变量在对参数判断和命令返回值判断时会使用,环境变量主要是在程序运行时需要,用户自定义变量在编程过程中使用量最多。==系统内置变量一般都是大写,而自己定义的变量尽量写成小写区分。==

2. 显示系统的内置变量命令 env

env    显示系统的内置变量命(只保留一部分)
HOSTNAME=localhost.localdomain  
SHELL=/bin/bash        
HISTSIZE=1000          
USER=root              
MAIL=/var/spool/mail/root  
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin  
PWD=/root      
LANG=zh_CN.UTF-8    
...

3. 显示系统内的变量也可以用户自定义变量 set

a=1              自定义变量
1=a              错误的格式
-bash: 1=a: 未找到命令
set |grep 1      查看是1的自定义变量
a=1

4. shell变量的格式

  • 变量名规则:可以是字母、数字下划线,首位不能为数字
  • 变量值有特殊符号时需要用单引号括起来,比如 a='a b c',a='a$b#C'
  • 尽量少用大写字母,因为大写字母大多都是系统的一些变量
  • 有很多特殊的关键字,最好不要用作变量名,比如 if for do done
  • 变量的累加
a=1
b=2
echo $a$b
12
a='a$bc'
echo $a$b
a$bc2
c="a$bc"      **?是$bc没定义,不能识别的原因吗?** 
echo $c 
a
c="a$b"c
echo $c
a2c
c='a$b'c
echo $c
a$bc
a=a"$b"c    学会这样使用"",是命令更清晰
  • 全局变量

export命令 设置或显示环境变量 在shell中执行程序时,shell会提供一组环境变量,这也使shell变量只能在当前使用。export可新增,修改或删除环境变量,供后续执行的程序使用,已达到使shell达到类似全局变量的目的。export的效力仅及于该此登陆操作,shell退出时失效。

==父shell中定义的NAME环境变量传递到了子shell中,在子shell中定义的NAME环境变量没有被带到父shell中。 如何改变呢?==

  1. 永久的:需要修改/etc/profile配置文件,export变量永久生效。
打开这个文件后,会看到里面有很多已经定义好的变量,按照格式把自定义变量写入进去,然后source /etc/profile重启服务就可以生效了
  1. 临时的:使用export命令进行全局行声明即可,变量在关闭shell时失效

aming=linux
echo $aming
linux

bash                进入bash
echo $aming
                    无结果
exit                退出bash
export aming=linux  全局声明
bash 
echo $aming
linux
  • 查看当前用户在哪个shell中 pstree命令 pstree命令可以把linux系统中所有进程通过树形结构打印出来
pstree |grep bash
      |-login---bash
      |-sshd---sshd---bash-+-grep
bash
pstree |grep bash
        |-login---bash
        |-sshd---sshd---bash---bash-+-grep

  • 取消变量 unset命令

unset + 变量名 把设置的变量取消掉

echo $aming
linux
unset aming
echo $aming

8.9 环境变量配置文件

1. 系统级环境变量配置文件

/etc/profile 用户环境变量,交互,登录才执行
/etc/bashrc 用户不用登录,执行shell就生效

2. 普通用户级境变量配置文件

~/.bashrc          该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。
~/.bash_profile    定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。
~/.bash_history    记录命令历史用的。
~/.bash_logout    当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。

转载于:https://my.oschina.net/zhouyuntai/blog/1788845

你可能感兴趣的:(Shell基础知识 (2) 之 管道符和作业控制、变量、环境变量配置文件)