2017.11.16 五周第四次课

8.6 管道符和作业控制

| 管道符

把前面的命令运行的结果丢给后面的命令

#cat /etc/passwd |wc -l 【wc -l 的意思是显示当前文档的行数,需要反向重定向wc -l < 1.txt】

#cat /etc/passwd >> 1.txt

作业控制:

Ctrl+z 暂停

fg 恢复暂停的命令

bg 切换至后台运行

Ctrl+c 终止

示例:

vi 1.txt

输入内容sadsfdfadfadfafdasdf

按 ESC ,使用Ctrl+z 暂停 #vi 1.txt

[1]+ stopped vi 1.txt 【vi命令已经停止】

使用 fg 命令恢复,回到bi窗口。

再次暂停,

#jobs 【查看被暂停或者后台运行的任务】

[1]+ stopped vi 1.txt

#bg 【暂停的命令去后台运行】

[1]+ vi 1.txt &

[1]+ Stopped vi 1.txt

vi命令不支持后台运行

#vmstat 1 > /tmp/1.log

^Z 【暂停命令】

[2]+ Stopped vmstat 1 > /tmp/1.log

#jobs

[1] - stopped vi 1.txt

[2]+ Stopped vmstat 1 > /tmp/1.log +表示优先级更高

#bg 2

[2]+ vmstat 1 > /tmp/1.log &

多个被暂停的任务会有编号,jobs可以查看所有任务,那么使用fg,bg的时候就需要有编号。bg2 把第二个被暂停的任务丢到后台跑起来,丢入后台需要使用在命令后加一个&符号,中间有个空格。

8.7/8.8 shell变量

命令env 列出系统预设的全部环境变量

#env

常见变量

#echo $PATH 决定了shell讲到哪些目录中寻找命令或程序

#echo $HOME 当前用户主目录

#echo $PWD 当前目录

#echo $LOGNAME 当前用户登录名

HISTSIZE 历史记录数

HOSTNAME 主机名称

SHELL 当前用户shell变量

LANG 语言相关环境变量,多语言可以修改此环境变量

MAIL 当前用户的邮件存放目录

命令set 列出全部预设的全部环境变量,包括env列出的是系统变量、用户自定义变量、额外变量

#set

set不仅可以显示系统预设的变量,也可以列出用户自定义的变量显示出来。

#myname=Aming

#echo $myname

Aming

#set |grep myname

myname=Aming

当前shell设定的变量,只针对当前shell有效。

#bash 此命令进入下一个子shell中

#echo $myname

没有返回结果

#exit

#echo $myname

Aming

1、让系统内所有用户登录后都能使用该变量

在/etc/profile文件最末行加入 export myname=Aming

运行 source /etc/profile 生效

2、只让当前用户使用该变量

用户主目录下的.bashrc 文件最末行加入 export myname=Aming

运行 source /etc/profile 生效

设定变量的规则

格式 a=b a为变量名,b为变量内容。前后没有空格

变量名由英文、数字以及下划线组成,不能数字开头

变量内容b带有特殊字符如空格,需要加上单引号

myname='Aming Li'

变量内容b本身带有单引号,需要双引号

myname="Aming's"

变量内容b需要其他命令运行结果,使用反引号

myname=pwd

变量内容可以累加其他变量内容,需要双引号

#myname="$LOGNAME"Aming

#echo $myname

rootAming

单引号双引号的区别

使用双引号,不会取消里面出现的特殊字符本身的作用。

使用单引号,里面的特殊字符全部失去本身的作用。

单引号里面所有特殊符号都会变成普通符号,比如 '123$a' 这里面的$a就不是引用变量了,

如果用双引号就可以引用变量 "123$a" 我具体举个例子吧:

[root@localhost ~]# a=9; echo '123$a'; b=8; echo "123$b"

123$a

1238

当前shell运行bash,会进入一个子bash。

输入图片说明

pstree 会把Linux系统中所有进程通过树形结构打印出来。在父shell中设定变量,子shell不会生效,如果要生效,需要export指令。

#abc=123

#export abc

export其实是声明变量的意思,让该shell的子shell知道变量的值。export不加变量值, 仅仅是可以打印出当前用户的一些变量出来。

取消变量

#unset abc

#unset myname

NOTE: 全局变量,仅仅在当前shell下或者当前的脚本里面有效果。

/etc/profile 里面,每次登陆,所有终端,甚至shell脚本里面都有效果。

env,set,export三个命令的区别

1、set,env和export这三个命令都可以用来显示shell变量

[root@localhost root]# aaa=bbb

[root@localhost root]# echo $aaa

bbb

[root@localhost root]# set |grep aaa

aaa=bbb

[root@localhost root]# env |grep aaa

[root@localhost root]# export aaa

[root@localhost root]# env |grep aaa

aaa=bbb

set 系统,当前,自定义 工作中不常用

env 系统 工作中不常用

export 显示当前导出成用户变量的shell变量

每个shell都有自己特有的变量,这和用户变量是不同的。当前用户变量和你用什么shell无关,不管你用什么shell都是存在的。比如HOME,SHELL等这些变量,但shell有自己的变量,不同的shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的。

export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。

2、unix shell的变量分类

在Shell中有三种变量:内部变量,环境变量,用户变量。

内部变量:系统提供,不用定义,不能修改

环境变量:系统提供,不用定义,可以修改,可以利用export将用户变量转为环境变量.

用户变量:用户定义,可以修改

(1)内部变量(系统变量,环境变量,参数变量,预定义变量)

内部变量是Linux所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在shell程序内这类变量的值是不能修改的。

表示方法 描述

$n $1 表示第一个参数,$2 表示第二个参数 ...

$# 命令行参数的个数

$0 当前程序的名称

$? 前一个命令或函数的返回码

$* 以"参数1 参数2 ... " 形式保存所有参数

$@ 以"参数1" "参数2" ... 形式保存所有参数

$$ 本程序的(进程ID号)PID

(2) 环境变量

Linux环境(也称为shell环境)由许多变量及这些变量的值组成,由这些变量和变量的值决定环境外观。这些变量就是环境变量。

包括两部分,一是,由系统设置的,主要包括: HOME,LOGNAME,MAIL,PATH,PS1,PWD,SHELL,TERM

二是,用户在命令行中设置的,使用export命令,但是用户注销时值将丢失

(3)用户变量(私有变量,本地变量)

在命令行中自己设定的.

8.9 环境变量配置文件

设置变量的三种方法

  1. 在/etc/profile文件中添加变量【对所有用户生效(永久的)】

  2. 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

例如:编辑wangbin用户目录(/home/guok)下的.bash_profile

$ vi /home/wangbin/.bash.profile

  1. 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

#export NAME=”yuan faxiang”

/etc/profile 系统相关的配置文件,针对所有用户

内设PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE,umask,export全局声明等等。

etc/profile里面的声明

It's NOT a good idea to change this file unless you know what you

are doing. It's much better to create a custom.sh shell script in

/etc/profile.d/ to make custom changes to your environment, as this

will prevent the need for merging in future updates.

#cd /etc/profile.d/

#vim path.sh 【.sh 表示这是个配置文件】

写入

#!/bin/bash

export PATH=$PATH:/tmp/:/date/bin

退出

#source /etc/profile

/etc/bashrc 系统级别的变量,针对所有shell,所有用户

bashrc里面的声明,和/etc/profile里面的声明一样

It's NOT a good idea to change this file unless you know what you

are doing. It's much better to create a custom.sh shell script in

/etc/profile.d/ to make custom changes to your environment, as this

will prevent the need for merging in future updates.

主要预设umask以及PS1。PS1是敲命令时,前面那串字符。例如CentOS root用户默认PS1是 [root@localhost~]#。

#echo $PS1

[\u@\h \W]$ 【h后面要有空格】

u 用户

h 主机名

W 当前目录的缩写目录 可以更改为小写w,表示当前路径的绝对路径

$ 符号 #

#PS1='[\u@\h \w]$' 显示绝对路径

更改umask

#umask

0022

#vim /etc/profile.d/umask.sh

!# /bin/bash

umask 0012

#source /etc/profile

#umask

0012

上述是两个系统级别的配置文件,每个用户的家目录下还有几个隐藏文件

#ls -la . |grep bash

.bash_profile 定义当前用户环境变量PATH

定义用户个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登陆时,该文件仅仅执行一次。

.bashrc 定义当前用户别名

包含专用于你的shell的bash信息,当登陆时以及每次打开新的shell时,文件被读取。可以讲用户自定义的alias或者自定义变量写到文件中。

.bash_history

记录命令历史

.bash_logout

退出shell时候,会执行该文件。建议把清理工作放到此文件中。

转载于:https://my.oschina.net/u/3461300/blog/1574756

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值