首页
学习
活动
专区
圈层
工具
发布

测试开发进阶(四十一)

校验Shell格式

https://www.shellcheck.net/

流程控制

while

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

代码语言:javascript
复制
while 条件do    执行语句done
代码语言:javascript
复制
#!/bin/bash#Author:zhongxina=1while [ ${a} -lt 5 ]do     echo ${a}    a=$((${a}+1))done

case

代码语言:javascript
复制
case 变量名 in    值1)        指令1    值2)        指令2    值3)        指令3    *)        # 条件都不满足        指令4esac
代码语言:javascript
复制
#!/bin/bash#Author:zhongxincase "$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

文本处理三剑客

  • grep
  • sed
  • awk

grep

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

常用选项

-i忽略大小写

-c只输出匹配行的数量

-n显示行号

-r递归搜索

-E支持拓展正则表达式

-w匹配整个单词

-l只列出匹配的文件名

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

最基础用法

代码语言:javascript
复制
$ grep mail passwd

大小写不敏感

代码语言:javascript
复制
$ grep New passwd$ grep New passwd -i

匹配有多少行符合要求

代码语言:javascript
复制
$ grep New passwd -i -c1

显示匹配的内容的行号

代码语言:javascript
复制
$ grep New passwd -i -n

查找路径下的内容

代码语言:javascript
复制
$ grep -r "bash" ./

只输出文件名

代码语言:javascript
复制
$ grep -rl "bash" ./

正则匹配

代码语言:javascript
复制
$ grep "s{2}" passwd -E

匹配整个单词

代码语言:javascript
复制
$ grep "oo" passwd -w$ grep "root" passwd -w

实例

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

代码语言:javascript
复制
$ grep "$USER" passwd  > /dev/null && echo "$USER是存在的"|| echo "$USER是不存在的"

查看是否运行了docker

-v:排除

代码语言:javascript
复制
# 查看ps中包含docker的内容$ ps -aux | grep dockerroot     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 -l0

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

匹配的行打印两次

原始行+匹配的行

代码语言:javascript
复制
$ sed "p" passwd

只打印匹配的行

代码语言:javascript
复制
$ sed -n "p" passwd

匹配 mail的那行

代码语言:javascript
复制
$ sed "/mail/ p" passwd -n

匹配以s开头的内容

代码语言:javascript
复制
$ sed -n "/^s/ p" passwd

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

代码语言:javascript
复制
$ sed -n "/^mail/,/^s/ p" passwd

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

代码语言:javascript
复制
$ sed '3,5 i Add content before the current line' passwd

正式写入需要加 -i

代码语言:javascript
复制
$ sed -i '3,5 i Add content before the current line' passwd

插入文件的内容

代码语言:javascript
复制
$ echo "testfile" >> a.txt$ sed -i '/man/,/mail/ r a.txt' passwd

匹配内容写入文件

代码语言:javascript
复制
$ sed -i '/man/,/mail/ w b.txt' passwd

删除内容

代码语言:javascript
复制
$ sed -i '/test/ d' passwd

修改

代码语言:javascript
复制
$ sed '3,6 s/nologin/666/' passwd |head
下一篇
举报
领券