【Shell】测试脚本

FC600测试脚本

测试脚本

#!/bin/bash
#运行脚本会列出which命令查不到的命令工具MISS信息

varPathCur=$(cd `dirname $0`; pwd)

declare -i varError_busybox
varError_busybox=0
errMsg_busybox=""

declare -i varError_base
varError_base=0
declare -i varNum_base
varNum_base=0
errMsg_base=""

declare -i varError_ext
varError_ext=0
declare -i varNum_ext
varNum_ext=0
errMsg_ext=""

printResult(){ 
	if [ $varError_busybox -eq 0 ]
	then
		echo -e "\033[32m busybox版本测试结论: OK. \033[0m\n"
	else
		echo -e "\033[31m busybox版本测试结论:异常,其中异常为:\n$errMsg_busybox \033[0m\n"
	fi
	
	if [ $varError_base -eq 0 ]
	then
		echo -e "\033[32m 基础工具集测试结论: OK. 共$varNum_base条指令,正常$varNum_base\033[0m\n"
	else
		varOk_base=$(($varNum_base-varError_base))
		echo -e "\033[31m 基础工具集测试结论:异常,共$varNum_base条指令,正常$varOk_base条,异常$varError_base条,其中异常为:\n$errMsg_base \033[0m\n"
	fi
	
	if [ $varError_ext -eq 0 ]
	then
		echo -e "\033[32m 扩展工具集测试结论: OK. 共$varNum_ext条指令,正常$varNum_ext\033[0m\n"
	else	
		varOk_ext=$(($varNum_ext-varError_ext))
		echo -e "\033[31m 扩展工具集测试结论:异常,共$varNum_ext条指令,正常$varOk_ext条,异常$varError_ext条,其中异常为:\n$errMsg_ext \033[0m\n"
	fi	
}

testBusyboxVersion(){
		varTool=busybox
		varResult=` which $varTool `x
		if [ $varResult = x ];then
			varError_busybox=$(($varError_busybox+1)) 
			echo -e "\033[31m 异常: 没有$varTool \033[0m"
			errMsg_busybox="$errMsg_busybox\033[31m $varError_busybox. 没有 $varTool \033[0m\n"
		else
			#软件版本检测
			varResult=` busybox --help `
			varResult=${varResult#"BusyBox v"}
			varVersion=${varResult:0:6}
			varDefVer="1.34.1"

			if [ "$varVersion" != "$varDefVer" ]
			then
				varError_busybox=$(($varError_busybox+1)) 
				echo -e "\033[31m 异常! $varTool 版本是 $varVersion, 不符合测试要求($varDefVer)\033[0m"
				errMsg_busybox="$errMsg_busybox\033[31m $varError_busybox. $varTool 版本是 $varVersion, 不符合测试要求($varDefVer) \033[0m\n"
			else
				echo -e "\033[32m 正确: $varTool 版本是 $varVersion\033[0m"	
			fi
		fi	
}

testBusybox(){
		echo -e "开始测试基础工具集: \r"
		
    for varTool in adduser date free groupdel groupmod id kill last lastb login logrotate newgrp nice ps reboot renice rlogin shutdown su top uname useradd userdel usermod who whoami chroot crontab dmesg insmod lsmod passwd rmmod vi grep ar bunzip2 bzip2 gunzip gzip tar unzip zip diff file find ln ls mv touch whereis which cat chmod chown cksum cp ssh scp sftp df du pwd rmdir stat umount dd fsck.ext4 fdisk mkfs.ext4 swapoff swapon sync ifconfig nc netstat ping tcpdump traceroute systemctl journalctl nandwrite flashcp mtdinfo pstree
    do
    		varNum_base=$(($varNum_base+1)) 
    		
        varResult=` which $varTool `x
        if [ $varResult = x ];then
        		varError_base=$(($varError_base+1)) 
            echo -e "\033[31m 缺失工具: $varTool \033[0m"
            errMsg_base="$errMsg_base\033[31m $varError_base. 缺失工具: $varTool \033[0m\n"
        else
            varResult=` which $varTool `
            echo -e "\033[32m 正确: $varTool 路径->$varResult \033[0m"
            #不是存在可执行文件就可以, 有些是到Busybox的链接, 但是Busybox里实际并没有支持, 会打印applet not found
            varResult="`$varTool --help 2>&1 | grep 'applet not found'`"
            if [ "$varResult" != "" ]
            then
                #echo "$varResult"
                varError_base=$(($varError_base+1)) 
                echo -e "\033[31m 异常: $varTool 存在, 但不能执行 \033[0m"
                errMsg_base="$errMsg_base\033[31m $varError_base. $varTool 存在, 但不能执行 \033[0m\n"
            fi
        fi
    done
}

#测试shell内建命令, $1执行命令, $2应当返回值, $3程序名称
function testShellBuildInCmd(){
		varNum_base=$(($varNum_base+1))
		
    echo -e "$1" > /tmp/test.sh
    chmod +x /tmp/test.sh
    /tmp/test.sh >/dev/null 2>&1
    retVal=$?
    if [ $retVal -eq $2 ]
    then
        echo -e "\033[32m 正确: $3 \033[0m"
    else
    		varError_base=$(($varError_base+1)) 
        echo -e "\033[31m 异常: $3, 指令: $1, 返回值: $retVal \033[0m"
        errMsg_base="$errMsg_base\033[31m $varError_base. $1 指令, 返回值错误 \033[0m\n"
    fi
}

#测试shell命令
testShell(){
		#echo -e "开始测试shell工具集: \r"
		
    testShellBuildInCmd "exit 200" 200 "exit"
    testShellBuildInCmd "logout" 1 "logout"
    testShellBuildInCmd "ulimit" 0 "ulimit"
    testShellBuildInCmd "cd /tmp" 0 "cd"
    #testShellBuildInCmd "cd -" 1 "cd test2"
    testShellBuildInCmd "pidof systemd" 0 "systemd"  #当前应当有systemd运行
    
    echo -e "--------------------------------------------------------------- \r\n"
}

#测试扩展命令, $1扩展命令, $2存放路径, $3建议最低版本,$4获取指令版本的方法,$5字符串截取方向(1从尾部截取),$6版本字符串截取,$7版本号长度,$8版本号列数
function testExtCmd(){
		varNum_ext=$(($varNum_ext+1))
		#echo $1;echo $2;echo $3;echo $4;echo $5;echo $6;
		varTool=$1
		varResult=` which $varTool `x
		if [ $varResult = x ];then
			varError_ext=$(($varError_ext+1)) 
			echo -e "\033[31m 缺失工具: $varTool \033[0m"
			errMsg_ext="$errMsg_ext\033[31m $varError_ext. 缺失工具: $varTool \033[0m\n"
		else
			declare -i err_path
			err_path=0
			declare -i err_ver
			err_ver=0
									
			#存放路径检测
			varResult=` which $varTool `
			varPath=${varResult%$varTool}
			# varDefPath=$2
			varDefPath="/usr/sbin/"
			varDefPath1="/usr/bin/"
		
			#软件版本检测
			varDefMinVer=$3
			varCmdResult=$4
			
			if [ $5 -eq 1 ]
			then
				varVersion=${varCmdResult: -$(($7))}
			else
				varCmdResult=${varCmdResult#$6}
				varVersion=${varCmdResult:0:$(($7))}
			fi

			if [ "$varPath" = "$varDefPath" ] || [ "$varPath" = "$varDefPath1" ]
			then
				echo -e "\033[32m 正确: $varTool 路径->$varPath\033[0m"	
			else
				err_path=$(($err_path+1))
				echo -e "\033[31m 异常! $varTool 路径是 $varPath, 不符合测试要求($varDefPath or $varDefPath1)\033[0m"
			fi

			if [ -z "$varVersion" ]
			then
				varError_ext=$(($varError_ext+1)) 
				echo $varTool | awk '{printf "\033[31m 异常! 无法获取 %s 的版本号 \033[0m\n", $1}'	
				
				if [ $err_path -eq 1 ]
				then
					errMsg_ext="$errMsg_ext\033[31m $varError_ext. $varTool 路径是 $varPath, 不符合测试要求($varDefPath)。\033[0m"
					errMsg_ext="$errMsg_ext\033[31m 并且无法获取 $varTool 的版本号 \033[0m\n"
				else
					errMsg_ext="$errMsg_ext\033[31m $varError_ext. 无法获取 $varTool 的版本号 \033[0m\n"	
				fi
			else
	 			#以"."分隔,取出版本号每个列的值,为了简单起见,认为版本号的列数不会超过3 
	 			vd=(1 2 3)
	    	vd[0]=`echo $varDefMinVer|awk -F . '{print $1}'`  
	    	vd[1]=`echo $varDefMinVer|awk -F . '{print $2}'`
	    	vd[2]=`echo $varDefMinVer|awk -F . '{print $3}'` 			
	    	vv=(1 2 3)
	    	vv[0]=`echo $varVersion|awk -F . '{print $1}'`  
	    	vv[1]=`echo $varVersion|awk -F . '{print $2}'`
	    	vv[2]=`echo $varVersion|awk -F . '{print $3}'`

				col=$8
				for ((i=0; i<col; i++))
				do
					if [ "${vv[i]}" -ge 0 ] 2>/dev/null 
					then 
						if [ ${vv[i]} -lt ${vd[i]} ];then
								err_ver=$(($err_ver+1))
								echo $varVersion $varDefMinVer $varTool | awk '{printf "\033[31m 异常! %s 版本号是 %s, 低于测试要求(%s)\033[0m\n", $3, $1, $2}'	
								break
						elif [ ${vv[i]} -gt ${vd[i]} ];then
								break
						fi
					else
						break		#非数字就不要比较了	
					fi	
				done
				
				if [ $err_ver -eq 0 ]
				then
					echo -e "\033[32m 正确: $varTool 版本号->$varVersion\033[0m"	
				fi

				if [ $err_path -eq 1 ] || [ $err_ver -eq 1 ]
				then
					varError_ext=$(($varError_ext+1)) 
					errMsg_ext="$errMsg_ext\033[31m $varError_ext. \033[0m"
					
					if [ $err_ver -eq 1 ]
					then
						errMsg_ext="$errMsg_ext\033[31m $varTool 版本号是 $varVersion, 低于测试要求($varDefMinVer) \033[0m"
					fi
					
					if [ $err_path -eq 1 ]
					then
						errMsg_ext="$errMsg_ext\033[31m $varTool 路径是 $varPath, 不符合测试要求($varDefPath) \033[0m"
					fi	
					
					errMsg_ext="$errMsg_ext\n"				
				fi	
					
			fi
		fi
}

#测试扩展工具集的版本和存放路径
testExt(){
		echo -e "开始测试扩展工具集: \r"
				
		testExtCmd sshd				"/usr/sbin/" 	"7.6" 		"`ssh -V 2>&1`" 				0	"OpenSSH_" 							3	2
		testExtCmd mosquitto	"/usr/sbin/" 	"1.6.15" 	"`mosquitto -h 2>&1`" 	0	"mosquitto version " 		6	3
		testExtCmd e2fsck			"/usr/sbin/" 	"1.46.5" 	"`e2fsck -V 2>&1`" 			0	"e2fsck " 							6	3
		#testExtCmd dropbear		"/usr/sbin/" 	"2022.82" "`dropbear -V 2>&1`" 		0	"Dropbear v" 						7	2
		testExtCmd sqlite3		"/usr/bin/" 	"3.38.2" 	"`sqlite3 -version`" 		0	"" 											6	3
		testExtCmd mmc				"/usr/sbin/" 	"0.1"		 	"`mmc -h`"					 		1	"" 											3	2
		testExtCmd pppd				"/usr/bin/" 	"2.4.8" 	"`pppd --help 2>&1`" 		0	"pppd version " 				5	3
		#chat 没有专门查版本的参数,是pppd的附属
		testExtCmd chat				"/usr/bin/" 	"2.4.8" 	"`pppd --help 2>&1`" 		0	"pppd version " 				5	3
		testExtCmd rz					"/usr/bin/" 	"0.12.20"	"`rz -h`" 							0	"rz version " 					7	3
		testExtCmd sz					"/usr/bin/" 	"0.12.20"	"`sz -h`" 							0	"sz version " 					7	3
		testExtCmd stress			"/usr/bin/" 	"1.0.4"		"`stress --version`"		0	"stress "			 					5	3
		testExtCmd rsyslogd		"/usr/sbin/" 	"8.16.0"	"`rsyslogd -v`"					0	"rsyslogd  "			 			8	3
		testExtCmd gdb				"/usr/bin/" 	"11.2"		"`gdb --version`"				0	"GNU gdb (GDB) "	 			4	2
		testExtCmd gdbserver	"/usr/bin/" 	"11.2"		"`gdbserver --version`"	0	"GNU gdbserver (GDB) "	4	2
		#ss版本,有的是iproute2-ss1612,有的是iproute2-5.14.0,格式不一样,这里取后者的格式
		testExtCmd ss					"/usr/bin/" 	"5.14.0"	"`ss --version`"				0	"ss utility, iproute2-"	6	3
		testExtCmd strace			"/usr/bin/" 	"5.5"			"`strace -V`"						0	"strace -- version "		4	2
		
		echo -e "--------------------------------------------------------------- \r\n"
}

testBusyboxVersion
testBusybox
testShell
testExt
printResult

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶雨莳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值