最近工作性质发生了改变,在做操作系统方面的测试。接手的第一个任务是做ltp stress。测试内核稳定性。

做完之后会结果进行统计分析。因为统计的内容比较多,都是通过shell命令行进行操作。于是编写了一个简单的shell脚本。

具体脚本内容如下:

#!/bin/bash

CASENUM=0 #定义了一个全局变量

passnum()

{

echo "=============="

pass=`grep PASS /home/ltp/ltp.log | wc -l`#统计执行用例pass的次数。

echo "pass的用例个数 $pass"

}

failnum()

{

echo "=============="

fail=`grep FAIL /home/ltp/ltp.log | wc -l`#统计执行用例fail的次数

echo "fail的用例个数 $fail"

}

casenum()

{

echo "=============="

pass=`grep PASS /home/ltp/ltp.log | wc -l`

fail=`grep FAIL /home/ltp/ltp.log | wc -l`

let CASENUM=($pass+$fail)#统计总的执行用例的次数(这里可以进行优化)

echo "总的用例个数 $CASENUM"

}

cpuload()

{

echo "==============="

ldavg1=`(sar -q -f /home/ltp/sar.out| tail -n 1|awk '{print $4}')`

echo "ladvg_1:$ldavg1"

ldavg5=`(sar -q -f /home/ltp/sar.out| tail -n 1|awk '{print $5}')`

echo "ladvg_5 $ldavg5 "

ldavg15=`(sar -q -f /home/ltp/sar.out|tail -n 1|awk '{print $6}')`

echo "ldavg_15 $ldavg15"

}

cpuuse()

{

echo "==============="

#use=`(sar -u -f /home/ltp/sar.out| sed -n '$p' |awk '{print $3}')`

use=`sar -u -f /home/ltp/sar.out| tail -n 1|awk '{print $3}'`

#system=`(sar -u -f /home/ltp/sar.out| sed -n "$p" |awk '{print $5}')`#写sed命令的时候一定得注意用单引号编写,sed -n "$p" 这种写法错误,导致无法找到对应数据。

system=`(sar -u -f /home/ltp/sar.out| tail -n 1 |awk '{print $5}')`

cpuuse=`awk 'BEGIN{printf "%.2f%%\n",('$use'+'$system')}'`

echo "CPU使用率为:$cpuuse"

}

memuse()

{

echo "==============="

mem=`(sar -r -f /home/ltp/sar.out| tail -n 1 |awk '{printf "%.2f%%\n", $4}')`

echo "内存使用率为:$mem"

}

swapuse()

{

echo "==============="

swap=`(sar -S -f /home/ltp/sar.out|tail -n 1|awk '{printf "%.2ff%%\n", $4}')`

echo "swap平均使用率为:$swap"

}

success()

{

echo "==============="

pass=`(grep PASS /home/ltp/ltp.log | wc -l)`

succ=`awk 'BEGIN{printf "%.2f%%\n",('$pass'/'$CASENUM')*100}'`

echo "成功比率为:$succ"

}

failcase()

{

echo "==============="

failcase=`grep FAIL /home/ltp/ltp.log |sort|uniq|wc -l`

echo "faicase总数为: $failcase"

grep FAIL /home/ltp/ltp.log |sort|uniq>/home/ltp/failcase.txt

echo "具体的fail列表在生成的/home/ltp/failcase.txt文件中请查看是否存在重复"

}

passnum

failnum

casenum

cpuload

cpuuse

memuse

swapuse

success

failcase

在调试脚本的时候,总结了以下几个小点:

1.需要的到某个命令的返回值,定义一个变量等于这个命令,但是这边命令必须用``(大键盘数字1左边的那个按钮反单引号)扩住,否则就不执行这个命令

2.编写一个函数之后,一定要在下边写一下执行函数名称,否则看不到返回结果

3.写sed命令的时候一定得注意用单引号编写,sed -n "$p" 这种写法,导致无法找到对应数据。应该写为sed -n '$p'也是长知识了,这个经实践发现写成

sed -n"2,$p"这种格式是提示不对的,然后改成单引号之后就好了,还是sed不熟练