CSV文件自动化(自定义参数)

 说明: 
CSV 文件:cmd_list1.csv
testcase:对应test case id
function:对应test case的标题
interfacenotes:对应bsp节点名称
cmd:对应bsp命令
needtest:【yes】执行这个case,【no】表示跳过不执行这个case
var1:表示参数1
var2:表示参数2
loop:表示命令或case循环几次,当多条命令需要循环时,命令必须以;拼接。
命令里[]表示参数占位符
注意参数,如果是循环需要写 1 2,而不是12

 cmd1.csv

testcase,function,interfacenotes,cmd,needtest,var1,var2,loop
8.1.1.1,CPLD Version,cpld_version,cat /sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-15/15-0060/cpld_version,no,,,
8.1.1.2,Boad Version,board_version,cat /sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-15/15-0060/board_version,yes,,,
8.1.8.3,front panel fan led,fan_led,cat /sys/bus/i2c/devices/15-0060/fan_led,yes,green red off,,
8.1.8.4,front panel power led,pwr1&2_led,cat /sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-15/15-0060/pwr[]_led,yes,,1 2,
8.1.8.5,front panel power led,pwr1&2_led,echo [] > /sys/bus/i2c/devices/15-0060/pwr[]_led1,yes,green red off,1 2,
8.1.8.6,fan led,fan_led,echo [] > /sys/bus/i2c/devices/10-0066/fan1_led;cat /sys/bus/i2c/devices/10-0066/fan1_led,yes,red green off,,2



 
#!/bin/bash
#################################################################
#    Copyrith (C) 2020 XXXX Ltd. All rights reserved.           #
#                                                               #
#   Author :xxxx                                                #
#   Create Time : Jan 8,2020                                    #
#   Applied Project:XXX                                         #
#   How to Use:Copy the script into OS in /root,call this script#
#################################################################
cmd_list="cmd1.csv"
cmd_fail_list="cmd_fail_list.csv"
cmd_count=0
cmd_skip=0
cmd_pass=0
cmd_fail=0
foder_date=`date '+%Y%m%d'`
file_date=`date '+%H%M'`

getTestcase(){
    local tc=""
    tc=`echo $LINE |awk -F "," '{print $1}'`
    echo $tc
}

getFunction(){
    local fn=""
    fn=`echo $LINE |awk -F "," '{print $2}'`
    echo $fn
}

getInterface(){
    local ifc=""
    ifc=`echo $LINE |awk -F "," '{print $3}'`
    echo $ifc
}
getCmd(){
    local cmd=""
    cmd=`echo $LINE |awk -F "," '{print $4}'`
    echo $cmd

}

getNeedtest(){
    local ndt=""
    ndt=`echo $LINE |awk -F "," '{print $5}'`
    echo $ndt
}

getVar1(){
    local var1=""
    var1=`echo $LINE |awk -F "," '{print $6}'`
    echo $var1

}
getVar2(){
    local var2=""
    var2=`echo $LINE|awk -F "," '{print $7}'`
    echo $var2
}

getLoop(){
    local loop=""
    loop=`echo $LINE|awk -F "," '{print $8}'`
    echo $loop

}
cat $cmd_list|tail -n+2|while read LINE
do
    cmd_tc=$(getTestcase "$LINE")
    cmd_fun=$(getFunction "$LINE")
    cmd_ifc=$(getInterface "$LINE")
    cmd_cli=$(getCmd "$LINE")
    cmd_ndt=$(getNeedtest "$LINE")
    cmd_var1=$(getVar1 "$LINE")
    cmd_var2=$(getVar2 "$LINE")
    cmd_loop=$(getLoop "$LINE")

    if [ -s $cmd_list ];then
               if [[ -z "$cmd_tc" ]] || [[ -z "$cmd_cli" ]] || [[ -z "$cmd_ifc" ]];then
                   echo "column ${cmd_tc} ${cmd_cli} ${cmd_ifc} is requited"
                   exit
               else

            cmd_count=$[$cmd_count+1]
            echo $cmd_count > cmd_count.log
            if [ ${cmd_ndt} == "yes" ];then

                if [[ -n "$cmd_var1" ]] && [[ -n "$cmd_var2" ]];then
                    echo $cmd_cli >> all_cmd.log

                #case1:two parameters var1 and var2
                    #setting (1 2) loop method
                    cmd1_pass=0
                    cmd1_fail=0
                    for v2 in $(seq 1 ${cmd_var2[@]})
                    #for v2 in `seq ${cmd_var2[@]}`
                    do
                        echo
                           for v1 in ${cmd_var1[@]}
                            #for v1 in `seq ${cmd_var1[@]}`
                            do
                                #loop to insted with $v1 and $v2
                                echo `sed 's/[]/'$v1'/1;s/[]/'$v2'/' all_cmd.log` >> tmp1_2.log
                            done

                    done
                    while read line
                    do
                        echo "#$line"
                        cmd=`eval $line`
                        if [[ $? -eq 0 ]];then  #一条case里的多条命令,小汇总summary,cmd1_pass+1,cmd1_fail+1,存到小变量里
                                cmd1_pass=$((cmd1_pass+1))
                                echo $cmd1_pass > cmd1_pass.log
                       else
                                cmd1_fail=$((cmd1_fail+1))
                                echo $cmd1_fail > cmd1_fail.log
                        fi
                        sleep 1
                    done < tmp1_2.log
                      if [[ $cmd1_fail == 0 ]];then

                       cmd1_fail=0
                    else

                       cmd1_fail=`cat cmd1_fail.log`

                    fi
                    if [[ $cmd1_fail -eq 0 ]];then   #判断整个case里的fail和pass数量,cmd_pass,cmd_fail,如果,小总结cmd1_fail为0,表示整个case是pass
                        cmd_pass=$((cmd_pass+1))
                        echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"else
                        echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]"
                        cmd_fail=$((cmd_fail+1))
                        cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt}
                        echo ${cmd_fail_info} >> $file_date$cmd_fail_list
                        echo "#${cmd_cli}" >> $file_date$cmd_fail_list
                        eval ${cmd_cli} 2>> $file_date$cmd_fail_list
                     fi

                #case2:one parameters var1
                        elif [[ -n "$cmd_var1" ]] && [[ ! -n $cmd_loop ]];then
                        cmd2_pass=0
                        cmd2_fail=0
                    for v1 in ${cmd_var1[@]}
                    do
                        echo "#${cmd_cli/[]/$v1}"
                        cmd=`eval ${cmd_cli/[]/$v}`
                       if [[ $? -eq 0 ]];then
                                cmd2_pass=$[$cmd2_pass+1]
                                echo $cmd2_pass > cmd2_pass.log
                       else
                                cmd2_fail=$[$cmd2_fail+1]
                                echo $cmd2_fail > cmd2_fail.log
                      fi
                    done
                    if [[ $cmd2_fail == 0 ]];then

                       cmd2_fail=0
                    else

                       cmd2_fail=`cat cmd2_fail.log`

                    fi
                     if [[ $cmd2_fail -eq 0 ]];then

                          cmd_pass=$((cmd_pass+1))
                          echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"
                          #echo $cmd_pass >cmd_pass.log
                    else
                          cmd_fail=$((cmd_fail+1))
                          echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]"
                          cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt}
                          echo ${cmd_fail_info} >> $file_date$cmd_fail_list
                          echo "#${cmd_cli}" >> $file_date$cmd_fail_list
                          eval ${cmd_cli} 2>> $file_date$cmd_fail_list
                     fi


                #case3:one parameters var2
                        elif [[ -n "$cmd_var2" ]] && [[ ! -n $cmd_loop ]];then
                        cmd3_pass=0
                        cmd3_fail=0
                    for v2 in ${cmd_var2[@]}
                    do
                        echo "#${cmd_cli/[]/$v2}"
                        cmd=`eval ${cmd_cli/[]/$v2}`
                        if [[ $? -eq 0 ]];then
                                cmd3_pass=$[$cmd3_pass+1]
                                echo $cmd3_pass > cmd3_pass.log
                       else
                                cmd3_fail=$[$cmd3_fail+1]
                                echo $cmd3_fail > cmd3_fail.log
                        fi
                    done
                    if [[ $cmd3_fail == 0 ]];then

                       cmd3_fail=0
                    else

                       cmd3_fail=`cat cmd3_fail.log`

                    fi
                       if [[ $cmd3_fail -eq 0 ]];then

                        cmd_pass=$((cmd_pass+1))
                        echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"else
                       cmd_fail=$((cmd_fail+1))
                       echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]"
                       cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt}
                       echo ${cmd_fail_info} >> $file_date$cmd_fail_list
                       echo "#${cmd_cli}" >> $file_date$cmd_fail_list
                       eval ${cmd_cli} 2>> $file_date$cmd_fail_list
                      fi
                #case4:one parameters var1 and loop
                        elif [[ -n "$cmd_var1" ]]&&[[ -n "$cmd_loop" ]];then
                      cmd4_pass=0
                      cmd4_fail=0
                   # for((lp=1;lp<=${cmd_loop};lp++))
                     for lp in `seq ${cmd_loop}`
                       do
                            echo
                            for v1 in ${cmd_var1[@]}
                            do
                                echo ${cmd_cli//[]/$v1}|awk -F ';' '{for(i=1;i<=NF;i++) print$i}' >>tmp1_loop.log
                           done


                       done

                          while read line
                          do

                            echo "#$line"
                            cmd=`eval $line`
                           if [[ $? -eq 0 ]];then
                                cmd4_pass=$[$cmd4_pass+1]
                                echo $cmd4_pass > cmd4_pass.log
                          else
                                cmd4_fail=$[$cmd4_fail+1]
                                echo $cmd4_fail > cmd4_fail.log
                           fi
                           sleep 1
                          done < tmp1_loop.log
                          if [[ $cmd4_fail == 0 ]];then

                             cmd4_fail=0
                         else

                            cmd4_fail=`cat cmd4_fail.log`

                          fi
                          if [[ $cmd4_fail -eq 0 ]];then

                               cmd_pass=$((cmd_pass+1))
                               echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"else
                               cmd_fail=$((cmd_fail+1))
                               echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]"
                               cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt}
                               echo ${cmd_fail_info} >> $file_date$cmd_fail_list
                               echo "#${cmd_cli}" >> $file_date$cmd_fail_list
                               eval ${cmd_cli} 2>> $file_date$cmd_fail_list
                          fi
                #case5:no parameters var2 and loop
                elif [[ -n "$cmd_var2" ]]&&[[ -n "$cmd_loop" ]];then
                    cmd5_pass=0
                    cmd5_fail=0
                    #for((lp=1;lp<=${cmd_loop};lp++))

                    for lp in $(seq 1 1 ${cmd_loop})
                    do
                        echo
                        for v2 in ${cmd_var2[@]}
                        do
                            echo ${cmd_cli//[]/$v2}|awk -F ';' '{for(i=1;i<=NF;i++) print$i}' >>tmp2_loop.log

                        done
                    done
                    while read line
                    do
                       echo "#$line"
                       cmd=`eval $line`
                       if [[ $? -eq 0 ]];then
                                cmd5_pass=$[$cmd5_pass+1]
                                echo $cmd5_pass > cmd5_pass.log
                       else
                                cmd5_fail=$[$cmd5_fail+1]
                                echo $cmd5_fail > cmd5_fail.log
                        fi
                        sleep 1
                    done <tmp2_loop.log
                    if [[ $cmd5_fail == 0 ]];then

                       cmd5_fail=0
                    else

                       cmd5_fail=`cat cmd5_fail.log`

                    fi
                        if [[ $cmd5_fail -eq 0 ]];then

                               cmd_pass=$((cmd_pass+1))
                               echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"
                               echo $cmd_pass>cmd_pass.log

                        else
                               cmd_fail=$((cmd_fail+1))
                               echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]"
                               echo $cmd_fail>cmd_fail.log
                               cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt}
                               echo ${cmd_fail_info} >> $file_date$cmd_fail_list
                               echo "#${cmd_cli}" >> $file_date$cmd_fail_list
                                eval ${cmd_cli} 2>> $file_date$cmd_fail_list
                         fi

                    else
                                echo "#${cmd_cli}"
                                cmd=`eval ${cmd_cli}`
                                if [[ $? -eq 0 ]];then
                                        cmd_pass=$[$cmd_pass+1]
                                    echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"
                                else
                                        cmd_fail=$[$cmd_fail+1]
                                        echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]"
                                        cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt}
                                        echo ${cmd_fail_info} >> $file_date$cmd_fail_list
                                        echo "#${cmd_cli}" >> $file_date$cmd_fail_list
                                        eval ${cmd_cli} 2>> $file_date$cmd_fail_list
                                fi
                        fi

            else
                cmd_skip=$[$cmd_skip+1]
                echo $cmd_skip >cmd_skip.log

            fi
        fi

    else

        echo "file $cmd_list is empty"
        exit
    fi


echo $cmd_skip > cmd_skip.log
echo $cmd_pass > cmd_pass.log
echo $cmd_fail > cmd_fail.log
done
cmd_skip=`cat cmd_skip.log`
cmd_pass=`cat cmd_pass.log`
cmd_count=`cat cmd_count.log`
cmd_fail=`cat cmd_fail.log`
#增加判断,没有fail,pass,skip文件时,设置这些值为0,否则,读里面的值。如果不增加判断,会提示文件找不到。
if [[ $cmd_skip == 0 ]];then cmd_skip=0 else cmd_skip=`cat cmd_skip.log` fi if [[ $cmd_fail == 0 ]];then cmd_fail=0 else cmd_fail=`cat cmd_fail.log` fi if [[ $cmd_pass == 0 ]];then cmd_pass=0 else cmd_pass=`cat cmd_pass.log` fi echo "=================================================================" echo "Total cmd:" $cmd_count echo "Test pass:" $cmd_pass echo "Test fail:" $cmd_fail echo "Test skip:" $cmd_skip echo "==================================================================" echo "Fail log " #cat $file_date$cmd_fail_list #备份fail的日志文件到日期文件夹下,每次执行的日志以时间戳为标记区分。 if [ ! -d $foder_date ];then #判断文件夹是否存在 mkdir $foder_date else if [ ! -f $file_date$cmd_fail_list ];then #判断文件是否存在 touch ./$foder_date/$file_date$cmd_fail_list else mv *$cmd_fail_list ./$foder_date fi fi ./arg.sh #脚本执行完,调用这个脚本去删除临时文件



运行效果:


 
原文地址:https://www.cnblogs.com/maisha/p/12186222.html