测试脚本
#!/bin/bash
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"
varResult="`$varTool --help 2>&1 | grep 'applet not found'`"
if [ "$varResult" != "" ]
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"
fi
fi
done
}
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
}
testShell(){
testShellBuildInCmd "exit 200" 200 "exit"
testShellBuildInCmd "logout" 1 "logout"
testShellBuildInCmd "ulimit" 0 "ulimit"
testShellBuildInCmd "cd /tmp" 0 "cd"
testShellBuildInCmd "pidof systemd" 0 "systemd"
echo -e "--------------------------------------------------------------- \r\n"
}
function testExtCmd(){
varNum_ext=$(($varNum_ext+1))
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="/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
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 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
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
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