第八章shell基础下预习笔记加课堂笔记

8.10 shell特殊符_cut命令

c=\$a\$b  脱义变量的前缀,无法引用变量

|   管道符代表把前面的命令的输出作为后面命令的输入

cut命令的用户 -d指定分隔符  -f指定第几段

8.11 sort_wc_uniq命令

-n 按数字顺序排序

特性符号和字母都会认为是零

 

-r 反着排序,数值最大的在最前面

wc -l 统计行数

wc -m 统计字符数

每一行结尾都有一个换行符,所以统计的字符数是8个

wc -w 统计词数,以空白字符做为分隔符

uniq 是去重,条件是先排序再去重

-c 是统计次数

sort 2.txt |uniq -c

tee 用法是类似重定向 >,重定向的同时在屏幕显示

-a 选项是追加的作用

tr 命令的作用是替换字符,可以单个字符替换,也可以指定范围替换

split 命令的作用是切割文件,默认单位是字节 

-b 选项是指定切割文件的大小,k M

-l 选项是指定切割文件的行数,

split -b 100k a.txt abc.  切割文件的同时指定文件名的前缀

8.13 shell特殊符号(下)

&> 正确和错误输出重定向。正确和错误输出到同一个文件

;多条命令之间用分号分隔

|| 代表或者的意思  逻辑或

第一条命令执行不成功的话就执行第二条命令

第一条命令执行成功的话就执行就不执行第二条命令了

&& 双and   逻辑与

第一条命令执行成功才会执行第二条命令

第一条命令执行不成功的话就不执行第二条命令

[ -d aminglinux ] 判断目录是否存在

 

shell基础下课堂笔记

shell变量

变量命名规则

  1. 变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线组成
  2. 变量名在有效范围内必须是唯一的

变量的分类

  1. 用户自定义变量
  2. 环境变量:主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的。
  3. 位置参数变量:主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。

1、用户自定义变量

定义变量

  1. 变量名=变量值
  2. 例如:x=5
  3. 例如:name="yuan ke"

变量的调用

  1. echo $变量名
  2. 例如:echo $x
  3. 例如:echo $name

变量的叠加

  1. x=123
  2. x="$x"456

变量的查看

set 查看系统下所有已经生效的变量,包括系统的环境变量和用户自定义变量。

-u 选项 执行 set -u 命令以后,如果调用没有声明的变量时会报错。

# set | less  name='yuan ke'x=123456

# echo $a ······没有给s设置变量,没有任何提示

# set -u ······执行命令后

# echo $a-bash: a: 未绑定变量 ······系统会提示没有绑定变量

变量删除

unset 变量名

# unset name

# set | name-bash: name: 未找到命令

2、环境变量

source 命令

source 环境变量配置文件名 或者 . 环境变量配置文件名

# 修改配置文件后,必须注销重新登录才能生效,使用source 命令可以不用重新登录

环境变量配置文件

PATH、HISTSIZE、PS1、HOSTNAME等环境变量写入对应的环境变量配置文件

环境变量配置文件中主要是定义对系统操作环境生效的系统默认的环境变量,如PATH等。

  1. /etc/profile 用户环境变量,交互登录才执行
  2. /etc/bashrc 用户不用登录,执行shell就生效
  3. /etc/profile.d/*.sh
  4. ~/.bash_profile
  5. ~/.bashrc
  6. ~/.bash_history
  7. ~/.bash_logout 用户退出后需要做的一些操作

在/etc/目录下的配置文件会对所有用户生效,放在家目录的配置文件,只会对当前用户生效。

PS1=[\[email protected]\h \W]$

修改用户 主机名 家目录等信息

shell 特殊符号

  1. *匹配任意内容
  2. ?匹配任意一个内容
  3. [] 匹配中括号中的一个字符
  4. #注释字符
  5. \ 脱义字符
  6. | 管道符

\ 脱义字符

[[email protected] ~]#a=1      [[email protected] ~]#b=2      [[email protected] ~]#c=$a$b

[[email protected] ~]#echo $c  12

[[email protected] ~]#c='$a$b' 这里是单引号,不引用函数  [[email protected] ~]#echo $c    $a$b

[[email protected] ~]#c=$a$b    [[email protected] ~]#c=\$a\$b  脱义    [[email protected] ~]#echo $c$a$b

和管道有关的命令

  1. cut 分割,-d分隔符 -f 指定段号 -c 指定第几个字符
  2. sort 排序,-n 以数字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2

# 需要注意的是按数字顺序排序的时候数字前面的字母默认是0

     3.wc -l 统计行数 -m 统计字符数 -w 统计词

    4.uniq 去重 -c 统计行数

    5.tee 和> 类似,重定向的同时还在屏幕上显示, -a追加

    6.tr 替换字符,tr 'a''b',大小写替换tr '[a-z]' '[A-Z]'

    7.split 切割,-b 大小(默认单位字节),-l行数

特殊符号

  1. $ 变量前缀,!$组合,正则里面表示行尾
  2. ;多条命令写到一行,用分号分割
  3. ~用户家目录,后面正则表达式表示匹配符
  4. &放到命令后面 会把命令丢到后台
  5. #> >> 2> 2>> &>
  6. []指定字符中的一个,[0-9],[a-zA-Z],[abc]
  7. || 和 &&,用于命令之间

[[email protected] ~]#ls 1.txt ; wc -l 2.txt 1.txt11 2.txt

|| 表示或,如果第一条命令执行正确,第二条命令则不执行。如果第一条命令执行错误,则执行第二条命令。

[[email protected] ~]#ls 123.txt || wc -l 2.txt ls: 无法访问123.txt: 没有那个文件或目录11 2.txt

[[email protected] ~]#ls 1.txt || wc -l 2.txt 1.txt

&& 如果第一条命令执行成功了才执行第二条命令,如果第一条命令错误,第二条命令则不执行。

[[email protected] ~]#ls 1.txt && wc -l 2.txt 1.txt11 2.txt

[[email protected] ~]#ls 123.txt && wc -l 2.txt ls: 无法访问123.txt: 没有那个文件或目录