笔记6——shell脚本编程

正则表达式

正则表达式是通过正则表达式引擎用特殊字符匹配符合条件的字符,定义了过滤数据的模式模板,模式由标准文本字符和特殊字符组成。正则表达式引擎是解释正则表达式模式并使用这些模式进行文件匹配的底层软件。POSIX基本正则表达式(BRE)引擎和POSIX扩展正则表达式(ERE)引擎是Linux中两种流行的正则表达式引擎。POSIX,全称Portable operating system interface for unix,即可移植性操作系统接口,定义了UNIX操作系统支持的功能,由一系列规范组成,POSIX正则表达式是关于正则表达式的规范。正则表达式通常与grep、cutsed、awk等字符提取命令搭配使用。

基础正则表达式

RE字符说明
^匹配行首
$匹配行尾
.匹配换行符外的任意一个字符
\转义符,去除特殊符号的特殊意义
*前一个字符匹配0次或任意多次
[ ]匹配[ ]中指定的一个字符
[ - ]匹配[ - ]中指定范围的一个字符
[^ ]匹配 [ ]字符外的任意一个字符
\{n\}前面的字符出现n次
\{n,\}前面的字符出现不小于n次
\{n,m\}前面的字符最少出现n次,最多出现m次

字符提取命令

grep命令——

语法:grep选项 匹配字符串 文件

选项:-i 不区分大小写

      -v 排除指定字符串所在行

      -n 显示行号

      -i 忽略大小写

      -s 不显示错误信息

      -c 统计匹配字符串的行数

cut命令——

语法:cut [选项] 文件名

选项:-f 提取第几列

      -d 按照指定分隔符(除空格符)分割列

awk命令——

语法:awk 'BEGIN{ commands } 条件类型1{动作1} 条件类型2{动作2}... END{ commands }' filename

内置变量:{FS = " "} 字段分隔符(默认是制表符和空格)

格式化打印语法:printf '输出类型输出格式' 输出内容

输出类型:%ns 输出字符串

          %ni 输出整数

          %m.nf 输出浮点数

输出格式:\n 换行

          \r 回车

          \t 水平制表符

sed命令——

语法:sed 选项 '动作' filename

选项:-n 将sed命令处理的数据行输出

      -i 将sed修改结果直接写入文件

      -e 在sed命令行执行多个命令,命令之间用分号隔开

动作:p 输出指定行

      d 删除指定行

      a 在当前行后追加一行或多行数据,多行数据用"\"代表数据未结束

      c 行替换

      i 在当前行前插入一行或多行数据

      s 字符串替换,格式"行范围s/旧字符串/新字符串/g"

字符处理命令

排序命令——

语法:sort 选项 文件名

选项:-f 忽略大小写

      -u 去除重复行

      -r 降序排序

      -n 以数值进行排序

      -t 指定分隔符(默认制表符)

      -k 指定排序字段

      -o 将排序结果输出到原文件

统计字符命令——

语法:wc 选项 文件名

选项:-l 统计行数

      -w 统计词数

      -m 统计字符数

条件判断

1.两种判断格式

语法1:test condition

语法2:[ condition ]

需注意语法2左括号右侧和右括号左侧各加一个空格,否则会报错。

2.测试选项

test命令可以判断3类条件:数值比较、字符串比较及文件比较。

数值比较——

比较作用
n1 -eq n2判断n1是否与n2相等
n1 -ne n2判断n1是否与n2不相等
n1 -gt n2判断n1是否大于n2
n1 -ge n2判断n1是否大于等于n2
n1 -lt n2判断n1是否小于n2
n1 -le n2判断n1是否小于等于n2

字符串比较——

比较作用
str1 = str2判断str1是否和str2相同
str1 != str2判断str1是否和str2不同
-z str判断str的长度是否为空
-n str判断str的长度是否非空

文件比较——

比较作用
-d判断文件是否存在且是一个目录
-f判断文件是否存在且是一个文件
-e判断文件是否存在
-s判断文件是否存在且非空
-r判断文件是否存在且可读
-w判断文件是否存在且可写
-x判断文件是否存在且可执行
file1 -nt file2判断file1的修改时间是否比file2新
file1 -ot file2判断file1的修改时间是否比file2旧
file1 -ef file2判断file1的inode是否和file2一致

条件判断式(结构化命令)

1.if语句

单分支if条件判断式——

if [ 条件判断式 ]; then

commands

fi

if [ 条件判断式 ]

then

commands

fi

双分支if条件判断式——

if [ 条件判断式 ]

then

commands

else

commands

fi

多分支if条件判断式——

if [ 条件判断式1 ]

then

commands

elif [条件判断式2 ]

then 

commands

......

else

commands

fi

2.case判断语句

case $变量名 in

"值1")

commands1

;;

"值2")

commands2

;;

......

*)

default commands

;;

esac

备注:case语句只能判断一个变量的值

循环判断(结构化命令)

1.for循环

语法1——

for 变量 in 值1 值2 值3 ...

do

commands

done

语法2——

for ((初始值;循环条件;变量变化))

do

commands

done

2.while循环

while [ 条件判断式 ]

do

commands

done

3.unitl循环

until [ 条件判断式 ]

do

commands

done

备注:循环条件成立,停止循环.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值