测试开发进阶(四十一)

测试开发进阶(四十一)

校验Shell格式

https://www.shellcheck.net/

shellcheck

流程控制

while

只要满足条件,就一直循环

1
2
3
4
while 条件
do
执行语句
done
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#Author:zhongxin

a=1
while [ ${a} -lt 5 ]
do
echo ${a}
a=$((${a}+1))
done

case

1
2
3
4
5
6
7
8
9
10
11
case 变量名 in
值1)
指令1
值2)
指令2
值3)
指令3
*)
# 条件都不满足
指令4
esac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
#Author:zhongxin

case "$2" in
+)
echo "$1 + $3 = $(($1+$3))"
;;
-)
echo "$1 - $3 = $(($1-$3))"
;;
\*)
echo "$1 * $3 = $(($1*$3))"
;;
/)
echo "$1 / $3 = $(($1/$3))"
;;
*)
echo "$2 不是合法的运算符"
;;
esac

case

文本处理三剑客

  • grep
  • sed
  • awk

grep

  • grep [option][pattern][file1,file2]
  • some command | grep [option][pattern]

常用选项

-i忽略大小写

-c只输出匹配行的数量

-n显示行号

-r递归搜索

-E支持拓展正则表达式

-w匹配整个单词

-l只列出匹配的文件名

-F不支持正则,按字符串字面意思进行匹配

最基础用法

1
$ grep mail passwd 

基础用法

大小写不敏感

1
2
$ grep New passwd 
$ grep New passwd -i

大小写敏感

匹配有多少行符合要求

1
2
$ grep New passwd -i -c
1

显示匹配的内容的行号

1
$ grep New passwd -i -n

行

查找路径下的内容

1
$ grep -r "bash" ./

递归检索只输出文件名

1
$ grep -rl "bash" ./

递归检索2

正则匹配

1
$ grep "s{2}" passwd -E

正则匹配

匹配整个单词

1
2
$ grep "oo" passwd -w
$ grep "root" passwd -w

-w

实例

/dev/null相当于linux中的回收站

1
$ grep "$USER" passwd  > /dev/null && echo "$USER是存在的"|| echo "$USER是不存在的"

查找

查看是否运行了docker

-v:排除

1
2
3
4
5
6
7
8
9
10
# 查看ps中包含docker的内容
$ ps -aux | grep docker
root 24521 0.0 0.0 14224 1088 pts/0 S+ 23:21 0:00 grep --color=auto docker

# 排除grep
$ ps -aux | grep docker | grep -v grep

# 查看符合的个数
$ ps -aux | grep docker | grep -v grep | wc -l
0

查找ps中

sed

  • 流编辑器,对文本进行逐行处理
  • sed [option] "pattern command" file
  • some command | sed [option] "pattern command"

常用选项[option]

-n只打印模式匹配的行

-f加载存放动作的文件

-r支持拓展正则

-i直接修改文件

匹配模式pattern

5 只处理第五行

5,10只处理第五行到第十行

/pattern1/只处理能匹配到pattern1的行

/pattern1/,/pattern2/只处理从匹配到pattern1的行到匹配pattern2的行

command命令

查询p

新增

  • a在匹配行的后面新增
  • i在匹配行前新增
  • r外部文件读入,行后新增
  • w匹配行写入外部文件

删除d

修改

  • s/old/new,只修改匹配行中第一个old
  • s/old/new/g修改匹配行中所有的old
  • s/old/new/ig忽略大小写

p相当于print

匹配的行打印两次

原始行+匹配的行

1
$ sed "p" passwd

只打印匹配的行

1
$ sed -n "p" passwd

匹配mail的那行

1
$ sed "/mail/ p" passwd -n

image-20191128232924959

匹配以s开头的内容

1
$ sed -n "/^s/ p" passwd 

正则匹配

匹配mail开头的行到s开头的行

1
$ sed -n "/^mail/,/^s/ p" passwd 

匹配

在3,4,5行前面添加内容

1
$ sed '3,5 i Add content before the current line' passwd 

添加内容

正式写入需要加-i

1
$ sed -i '3,5 i Add content before the current line' passwd 

正式写入

插入文件的内容

1
2
$ echo "testfile" >> a.txt
$ sed -i '/man/,/mail/ r a.txt' passwd

插入文件内容

匹配内容写入文件

1
$ sed -i '/man/,/mail/ w b.txt' passwd 

写入文件

删除内容

1
$ sed -i '/test/ d' passwd 

修改

1
$ sed '3,6 s/nologin/666/' passwd |head

修改

 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
您的支持将鼓励我继续创作!