一、Linux 的自定义函数、系统函数库、资源脚本控制、信号、一次性计划任务、周期性计划任务、脚本加锁、元字符、find、sed 及 awk、sed 替换命令、sed 指令及其它指令、sed 多行模式空间、保持空间、awk 字段和表达式
- 自定义函数,如下所示:
- 函数用于"包含"重复使用的
- 命令结合
- 自定义函数,如下:
function fname(){
命令
}
- 函数的执行,
fname
- 自定义函数,如下所示:
- 函数作用范围的变量,
local
变量名 - 函数的参数,
$1 $2 $3 ... $n
- 系统脚本,如下所示:
- 系统自建了函数库,可以在脚本中引用,如
/etc/init.d/functions
- 自建函数库,使用
source
函数脚本文件导入函数
- 脚本优先控制,如下所示:
- 可以使用
nice
和renice
调整脚本优先级 - 避免出现不可控的死循环,死循环导致
cpu
占用过高,死循环导致死机
- 捕获信号,捕获信号脚本的编写,如下所示:
kill
默认会发送 15 号信号给应用程序ctr+c
发送 2 号信号给应用程序- 9 号信号不可阻塞
- 一次性计划任务,如下所示:
- 计划任务,让计算机在指定的时间运行程序
- 计划任务分为一次性计划任务和周期性计划任务
- 一次性计划任务
at
- 周期性计划任务,
cron
,如下所示:
- 配置方式,
crontab -e
- 查看现有的计划任务,
crontab -l
- 配置格式,分钟 小时 日期 月份 星期 执行的命令,注意命令的路径问题
- 计划任务加锁,如果计算机不能按照预期时间运行,
anacontab
延时计划任务和flock
锁文件。 - 元字符,如下所示:
.
匹配除换行符外的任意单个字符*
匹配任意一个跟在它前面的字符[]
匹配方括号中的字符串中的任意一个^
匹配开头- $ 匹配结尾
\
转义后面的特殊字符
- 扩展元字符,如下所示:
+
匹配前面的正则表达式至少出现一次?
匹配前面的正则表达式出现零次或一次|
匹配它前面或后面的正则表达式
Vim
和sed、AWK
的区别,交互式与非交互式,文件操作模式与行操作模式。sed
基本用法,sed
一般用于对文本内容做替换,如sed '/user1/s/user1/u1/' /etc/passed
。AWK
基本用法,AWK
一般用于对文本内容进行统计,按需要的格式进行输出,如下所示:
cut
命令,cut -d: -f 1 /etc/passwd
AWK
命令,awk -F: '/wd$/{print $1}' /etc/passwd
sed
的模式空间,sed
的基本工作方式,如下所示:
- 将文件以行为单位读取到内存,模式空间
- 使用
sed
的每个脚本对该行进行操作 - 处理完成后输出改行
sed
的替换命令s
,如下所示:
sed 's/old/new/' filename
sed -e 's/old/new' -e 's/old/new' filename ...
sed -i 's/old/new' 's/old/new/' filename ...
- 使用正则表达式,带正则表达式的替换命令
s
,如下所示:
sed 's/正则表达式/new/' filename
sed -r 's/扩展正则表达式/new/' filename
sed
的替换命令加强版,分为全局替换、标志位、寻址、分组、sed
脚本文件。- 全局替换,
s/old/new/g
,其中g
为全局替换,用于替换所有出现的次数。/
如果和正则匹配的内容冲突可以使用其它符号,如s@old@new@g
。 - 标志位,
s/old/new
标志位,如下所示:
- 数字,第几次出现才进行替换
g
,每次出现都进行替换p
打印模式空间的内容,sed -n 'script' filename
阻止默认输出w file
将模式空间的内容写入到文件
- 寻址,默认对每行进行操作,增加寻址后对匹配的行进行操作,如下所示:
/正则表达式/s/old/new/g
行号s/old/new/g
,行号可以是具体的行,也可以是最后一行 $ 符号- 可以使用两个寻址符号,也可以混合使用行号和正则地址
- 分组,寻址可以匹配多条命令,
/regular/{s/old/new/; s/old/new/}
。 - 脚本文件,可以将选项保存为文件,使用
-f
加载脚本文件,sed -f sedscript filename
。 sed
的其它命令,删除命令、追加、插入、更改、打印、下一行、读文件和写文件、退出命令。- 删除命令,
[寻址]d
,删除模式空间内容,改变脚本的控制流,读取新的输入行。 - 追加插入和更改,追加命令
a
,插入命令i
,更改命令c
。 - 读文件和写文件,读文件命令
r
,写文件命令w
。 - 下一行,下一行命令
n
,打印行号命令=
,打印命令p
,退出命令q
。 - 为什么要有多行模式,如下所示:
- 配置文件一般为单行出现
- 也有使用
XML
或JSON
格式的配置文件,为多行出现
- 多行匹配命令,如下所示:
N
将下一行加入到模式空间D
删除模式空间中的第一个字符到第一个换行符P
打印模式空间中的第一个字符到第一个换行符
- 保持空间,保持空间也是多行的一种操作方式,将内容暂存在保持空间,便于做多行处理。
- 保持空间命令,如下所示:
h
和H
将模式空间内容存放到保持空间g
和G
将保持空间内容取出到模式空间x
交换模式空间和保持空间内容
AWK
和sed
的区别,如下所示:
AWK
更像是脚本语言AWK
用于"比较规范"的文本处理,用于统计数量并输出指定字段- 使用
sed
将不规范的文本,处理为"比较规范"的文本
AWK
脚本的流程控制,输入数据前例程BEGIN{}
、主输入循环{}
、所有文件读取完成例程END{}
。AWK
的记录和字段,如下所示:
- 每行称作
AWK
的记录 - 使用空格、制表符分隔开的单词称作字段
- 可以自己指定分隔的字段
- 字段的引用,如下所示:
awk
中使用$1 $2 ... $n
表示每一个字段,如awk '{print $1,$2,$3}' filename
awk
可以使用-F
选项改变字段分隔符,如awk -F ',''{ print $1,$2,$3}' filename
,分隔符可以使用正则表达式
AWK
的表达式,赋值操作符、算数操作符、系统变量、关系操作符、布尔操作符。- 赋值操作符,如下所示:
=
是最常用的赋值操作符,如var1 = 'name'、var2 = 'hello' 'world'、var3 = $1
- 其它赋值操作符,
++、--、+=、-=、*=、/=、%=、^=
- 系统变量,如下所示:
FS
和OFS
字段分隔符,OFS
表示输出的字段分隔符RS
记录分隔符NR
和FNR
行数NF
字段数量,最后一个字段内容可以用$NF
取出
- 关系操作符,
<、>、<=、>=、==、!=、~、!~
。布尔操作符,&&、||、!
。