软件测试工程师常用linux命令
1. cat
cat file_name
显示文件全部内容cat -b file_name
显示文件非空行内容cat -E file_name
在文件每行末尾显示$,常用于管道功能cat -n file_name
显示内容和行号
2. head:默认获取文本前10行
head -n 文件路径
获取前n行
3. tail:默认获取文本后10行
tail -n 文件路径
获取后n行
4. cut
- 取出文本指定的列
- 默认以空格或tab键进行分隔
- 选项
-d
指定分隔符-f
指定获取列号cut -d' ' -f5 test.txt
打印以空格分隔的第5列
5. more:翻页显示
6. uniq
- 去除重复的内容
- 选项
-d
仅打印重复的元素-c
打印元素重复的个数
7. sort
- 对文本内容进行排序
- 默认以字符的ASCII码数字从小大排序
- 选项
-n
以数值大小排序-r
倒序-t
指定分隔符,默认为空格-knum
指定以某个字段来排序
8. wc
- 计算文本数量
- 选项
wc -l 文本名
打印行数wc -w 文本名
打印单词数wc -c 文本名
打印字节数wc -L 文本名
打印最长行的字节数
9. 定义变量
变量名='变量值'
变量名=" 变量值"
变量名=${linux命令}
10. 查看变量
- 方式1:
$变量名
- 方式2:
"$变量名"
- 方式3:
"${变量名}"
标准使用方式(强烈推荐使用)
- 方式4:
${变量名}
推荐使用
11. 内置变量
$0
获取当前执行的shell脚本文件名,包括脚本路径$n
获取当前执行的shell脚本第n个参数值,n=1…9,如果n大于9需要用大括号括起来${10}$#
获取当前shell命令行汇总参数总个数$?
获取执行上一个指令的返回值(0为成功,非0为失败)
1. 常用快捷键
contrl+l 清除工作空间
contrl+c退出终端
contrl+r 搜索
2. linux文本三剑客
1. grep
- 两种形式:
grep [option] [pattern] [file1,file2,...]
some command | grep [option] [pattern]
- 选项
-i 忽略大小写
-c 只输出匹配行的数量
-n 显示行号
-v 取反
-o 仅显示匹配到的字符串
-r 递归搜索
-E 支持扩展正则表达式
-W 匹配整个单词
-l 只列出匹配的文件名
-F 不支持正则,按字符串字母意思匹配
2. sed(脚本增删改查–针对行)
- 流编辑器,对文本逐行处理
- 两种形式
sed [option] "pattern command" file
some command | sed [option] "pattern command"
- 选项
-n 只打印模式匹配的行
-f 加载存放动作的文件
-e 以选项中指定的script来处理输入的文本文件
-r 支持扩展正则
-i 以选项中指定的script文件来处理输入的文本文件
- pattern 模式
5 只处理第五行
5,10 只处理第五行到第十行
/pattern1/ 只处理能匹配pattern1的行
/pattern1/,/pattern2/ 只处理从匹配pattern1的行到匹配pattern2的行
- cmmand命令
- 查询
p
打印 - 新增
a
在匹配行后新增
i
在匹配行前新增
r
外部文件读入,行后新增
w
匹配行写入外部文件(写入一个新文件) - 删除
d
- 修改
s/old/new/
只修改匹配行中第一个old
s/old/new/g
修改匹配行中所有的old
s/old/new/ig
忽略大小写
c
取代
- 查询
3. awk(针对列)
- 处理数据并生成报告
- 两种形式
awk 'BEGIN{}pattern{commands}END{}' file
some command | grep [option][
模式 含义
BEGIN{} 处理数据之前执行
pattern 匹配模式
{commands} 处理的命令
END{} 处理数据之后执行
- 内置变量
内置变量 含义
$0 整行内容
$1~$n 当前行的第1~n个字段
NF(Number Field) 当前行字段数(a aa aaa 表示有3个字段数)
NR(Number Row) 当前行行号,从1开始
FS(Field Separator) 输入字段分隔符,默认为空格或tab键
RS(Row Separator) 输入行分隔符,默认为回车符
OFS (Output Field Separator) 输出字段分隔符,默认为空格
ORS(Output Row Separator) 输出行分隔符,默认为回车符
- printf 格式符
%s 字符串
%d 十进制数
%f 浮点数
- 修饰符
- 左对齐
+ 右对齐
- pattern匹配模式
/pattern1/ 只处理能匹配pattern1的行
/pattern1/,/pattern2/ 只处理从匹配pattern1的行到匹配pattern2的行
- 补充
$NF
打印最后一列$(NF-1)
打印倒数第二列awk 'BEGIN{FS=":"}{printf $1} 文件名
打印第一列awk ' 'BEGIN{FS=":"}{printf "%-20s%-20s\n",$1,$NF} 文件名
awk ' 'BEGIN{FS=":"} /pattern1/,/patern2/ {printf "%-20s%-20s\n",$1,$NF} 文件名
加上正则匹配awk 'BEGIN{FS=" "} if条件表达式 {printf "%-20s%-20s\n",$1,$NF} 文件名
加上if表达式awk 'BEGIN{FS=" "} $n ~ "bin" {printf "%-20s%-20s\n",$1,$NF} 文件名
某列模糊匹配awk 'BEGIN{FS=" "} $n ~ "bin" {count++; printf "%-20s%-20s\n",$1,$NF} END{printf "%-20s%-20s\n","total","count"} 文件名 wc -l
在末尾加上总行数打印
4. find
- 格式详解
find [路径] [参数] [关键字] [动作]
- 参数:
-name 按照文件名查找文件
-type 查找某一类型文件
-mtime 查找某天修改的文件
-path "子目录" 在指定目录的的子目录下查找,一般与-prune使用
-prune 在查找文件时,忽略指定的内容,不能和-depth共用,否则会自动忽略prune
- 动作:
-print 默认属性,打印信息
-ls 列出文件详细属性
-exec 命令 {} \; 对过滤的文件进行下一步操作
注意:
{} 就相当于过滤出来的文件
操作类似于 | xargs 命令
- 命令案例
find . -name "passwd*" -exec cp {} {}.bak \;
find . -name "*txt.bak" -exec cp {} {}.bak \;
find . -name "*bak.bak" | xargs rm -f
find . -name "*txt.bak" -exec rm -f {} \;
5. 日志分析案例
1. 统计每位测试人员执行用例总数
BEGIN{
print "%-10s%-10s\n","Tester","TotalTescases"
}
{
USERS[$4] += 1
}
END{
for (u in USERS)
print("%-10s%-10d\n",u,USERS[U]
}
2. 分别统计每位测试人员执行用例成功和失败的总数
BEGIN{
print "%-10s%-10s%-10s\n","Tester","PassTotal","FailTotal"
}
{
if ($5 == "Pass")
{
SUCCESS[$4] += 1
}else
{
FAIL[$4] += 1
}
USERS[$4] += 1
}
END{
for (u in USERS)
print("%-10s%-10d%-10d\n",u,SUCCESS[u],FAIL[u]
}
3. 将1、2合并,同时分别统计每位测试人员执行用例CRITICAL、ERROR日志等级数以及所有测试人员每项总数
BEGIN{
print "%-10s%-10s%-10s\n","Tester","ErrorTotal","CriticalTotal","PassTotal","FailTotal"
}
{
if ($5 == "Pass")
{
SUCCESS[$4] += 1
}else
{
FAIL[$4] += 1
}
if ($3 == "ERROR")
{
ERROR[$4] += 1
}
if ($3 =="CRITICAL")
{
CRITICAL[$4] += 1
}
USERS[$4] += 1
}
END{
for (u in USERS)
{
ALL_ERRORS+=ERROR[u]
ALL_CRITICALS+=CRITICAL[u]
ALL_SUCCESSS+=SUCCESS[u]
ALL_FAILS+=FAIL[u]
printf "%-10s%-12d%-18d%-12d%-12d\n",u,ERROR[u],CRITICAL[u],SUCCESS[u],FAIL[u]
}
printf "%-10s%-12d%-18d%-12d%-12d\n","Total",ALL_ERRORS,ALL_CRITICALS,ALL_SUCCESS,ALL_FAILS
}