Linux服务器监控系统scout_functions

##########################################
##                                      ##
##       服务器监控系统(函数部分)       ##
##                                      ##
##             版本号:1.0.0             ##
##                                      ##
##              程序:周杰               ##
##                                      ##
##  版权所有:武汉卓杰教育网络科技有限公司  ##
##                                      ##
##            日期:2002年3月            ##
##                                      ##
##########################################
##################
## 定义基本函数 ##
##################
####################函数err_par_num(err_fun_name,err_par_num)####################
err_par_num() {
echo "发现错误!函数$1的参数个数为$2!不符合函数$1的要求!请修正该错误!"
}
####################函数err_par_num(err_fun_name,err_par_num)####################
####################函数s_re(len,sym,color)####################
#函数s_re用于(慢速的)重复输入一定数量的符号
#其中$1为待输出符号的长度,$2为待输出的符号类型,$3为待输出的颜色类型
#如果$2为空,则输出$1个长度的空格
#如果$3为空,则输出为白色
s_re() {
	if [ $# -ge 1 ] && [ $# -le 3 ]
	then
		if [ $3 ]
		then
			echo -n "$3"
		else
			echo -n "$N_WHT_C"
		fi
		num=0
		while [ $num -lt $1 ]
		do
			if [ $2 ]
			then
				echo -n "$2"
			else
				echo -n " "
			fi
			num=`expr $num + 1`
		done
		echo -n "$CLS_C"
	else
		err_par_num "S_Re()" "$#"
	fi
}
####################函数s_re(len,sym,color)####################
####################函数f_re(len,sym,color)####################
#函数f_re用于(快速的)重复输入一定数量的符号
#其中$1为待输出符号的长度,$2为待输出的符号类型,$3为待输出的颜色类型
#如果$2为空,则输出$1个长度的空格
#如果$3为空,则输出为白色
f_re() {
	if [ $# -ge 1 ] && [ $# -le 3 ]
	then
		if [ $3 ]
		then
			echo -n "$3"
		else
			echo -n "$N_WHT_C"
		fi
		num=0
		tmps=""
		while [ $num -lt $1 ]
		do
			if [ $2 ]
			then
				tmps=$tmps$2
			else
				tmps=$tmps" "
			fi
			num=`expr $num + 1`
		done
		echo -n "$tmps"
		echo -n "$N_WHT_C"
	else
		err_par_num "F_Re()" "$#"
	fi
}
####################函数f_re(len,sym,color)####################
####################函数s_line(len,sym,color)####################
#函数s_line用于(慢速的)输出一行符号
#其中$1为待输出符号的长度,$2为待输出的符号类型,$3为待输出的颜色类型
#如果参数$1不为空,则执行输出;如果$1为空,则报错并退出
#如果$3为空,则输出为白色
s_line() {
	if [ $# -ge 1 ] && [ $# -le 3 ]
	then
		#计算两边要添加的空格的数量
		sides_num=0
		sides_num=`expr $MAX_LEN - $1`
		sides_num=`expr $sides_num / 2`
		#输出前面的空格
		s_re $sides_num
		#输出中间的符号
		s_re $1 "$2" "$3"
		#输出后面的空格
		s_re $sides_num
		echo ""
	else
		err_par_num "S_Line()" "$#"
	fi
}
####################函数s_line(len,sym,color)####################
##################
## 定义综合函数 ##
##################
####################函数c_f_f_title(len,sides_len,sym,side_color,title_array,title_color)####################
#函数c_f_f_title用于(综合的)(快速的)(快速的)输出一个标题框
#其中$1为标题总的长度,$2为两侧符号的长度
#$3为两侧的符号类型,$4为待输出的两侧颜色类型
#$5为中间标题的内容的集合,$6为待输出的标题颜色类型
#若$5(即中间标题的内容)为空,则仅输出两侧的符号
#如果参数$1不为空,则执行输出;如果$1为空,则报错并退出
#如果$4或$6为空,则输出为白色
c_f_f_title() {
	if [ $# -ge 2 ] && [ $# -le 6 ]
	then
		######no_echo_f_line $1 "$3" "$4"######
		######累计并保存line到变量f_f_line_str中######
		f_f_line_str=""
		#计算两边要添加的空格的数量
		sides_num=0
		sides_num=`expr $MAX_LEN - $1`
		sides_num=`expr $sides_num / 2`
		tmps=""
		#累计前面的空格
		tmps=`f_re $sides_num`
		#累计中间的符号
		tmps=$tmps`f_re $1 "$3" "$4"`
		#累计后面的空格
		tmps=$tmps`f_re $sides_num`
		#将累计保存
		f_f_line_str="$tmps"
		######累计并保存line到变量f_f_line_str中######
		######no_echo_f_line $1 "$3" "$4"######
		######no_echo_f_title $1 $2 "$3" "$4"######
		######累计并保存空title到变量f_f_title_str中######
		f_f_title_str=""
		#计算外侧要添加的空格的数量
		out_sides_num=0
		out_sides_num=`expr $MAX_LEN - $1`
		out_sides_num=`expr $out_sides_num / 2`
		#计算内侧要添加的空格的数量
		in_sides_num=0
		in_sides_num=`expr $1 - $2 \* 2`   ###注意这里已经将后面的屏蔽"- ${#5}"
		in_sides_num=`expr $in_sides_num / 2`
		tmps=""
		#累计外侧前面的空格
		tmps=`f_re $out_sides_num`
		#累计前面的符号
		tmps=$tmps`f_re $2 "$3" "$4"`
		#累计内侧前面的空格
		tmps=$tmps`f_re $in_sides_num`
		#累计内侧后面的空格
		tmps=$tmps`f_re $in_sides_num`
		#累计后面的符号
		tmps=$tmps`f_re $2 "$3" "$4"`
		#累计外侧前面的空格
		tmps=$tmps`f_re $out_sides_num`
		#将累计输出
		f_f_title_str="$tmps"
		######累计并保存空title到变量f_f_title_str中######
		######no_echo_f_title $1 $2 "$3" "$4"######
		######no_echo_f_f_title $1 $2 "$3" "$4" "$5" "$6"######
		######累计并保存内容title到数组f_f_title_array[]中######
		declare -a tmps_array=(`echo $5`)
		tmps_num=0
		while [ $tmps_num -lt ${#tmps_array[*]} ]
		do
			#计算外侧要添加的空格的数量
			out_sides_num=0
			out_sides_num=`expr $MAX_LEN - $1`
			out_sides_num=`expr $out_sides_num / 2`
			#计算内侧要添加的空格的数量
			in_sides_num=0
			in_sides_num=`expr $1 - $2 \* 2 - ${#tmps_array[$tmps_num]}`
			in_sides_num=`expr $in_sides_num / 2`
			tmps=""
			#累计外侧前面的空格
			tmps=`f_re $out_sides_num`
			#累计前面的符号
			tmps=$tmps`f_re $2 "$3" "$4"`
			#累计内侧前面的空格
			tmps=$tmps`f_re $in_sides_num`
			#累计中间的符号
			if [ ${tmps_array[$tmps_num]} ]
			then
				tmps=$tmps`f_re 1 "${tmps_array[$tmps_num]}" "$6"`
				#如果中间标题内容长度为奇数,则加一个空格
				tmps_odd=0
				tmps_odd=`expr ${#tmps_array[$tmps_num]} / 2`
				tmps_odd=`expr $tmps_odd \* 2`
				if [ $tmps_odd -ne ${#tmps_array[$tmps_num]} ]
				then
					tmps=$tmps" "
				fi
			fi
			#累计内侧后面的空格
			tmps=$tmps`f_re $in_sides_num`
			#累计后面的符号
			tmps=$tmps`f_re $2 "$3" "$4"`
			#累计外侧前面的空格
			tmps=$tmps`f_re $out_sides_num`
			#将累计保存的数组f_f_title_array[]中
			f_f_title_array[$tmps_num]="$tmps"
			tmps_num=`expr $tmps_num + 1`
		done
		######累计并保存内容title到数组f_f_title_array[]中######
		######no_echo_f_f_title $1 $2 "$3" "$4" "$5" "$6"######
		######输出所有累计并保存着的变量######
		echo "$f_f_line_str"
		echo "$f_f_title_str"
		tmps_num=0
		while [ $tmps_num -lt ${#tmps_array[*]} ]
		do
			echo "${f_f_title_array[$tmps_num]}"
			echo "$f_f_title_str"
			tmps_num=`expr $tmps_num + 1`
		done
		echo "$f_f_line_str"
		######输出所有累计并保存着的变量######
	else
		err_par_num "C_F_F_Title" "$#"
	fi
}
####################函数c_f_f_title(len,sides_len,sym,sides_color,title_array,title_color)####################
####################函数c_s_info(len,sides_len,sides_sym,sides_color,middle_sym,middle_color,front_info_array,front_color,back_info_array,back_color)####################
#函数c_s_info用于(综合的)(慢速的)输出一个两侧有符号,两侧有信息,中间有符号的信息框
#其中$1为信息总的长度,$2为两侧符号的长度
#$3为两侧的符号类型,$4为待输出的两侧符号颜色类型
#$5为中间的符号类型,$6为中间符号颜色类型
#$7为前面信息的内容的集合,$8为前面信息颜色类型
#$9为后面信息的内容的集合,$10为后面信息颜色类型
#若$5(即中间标题的内容)为空,则仅输出两侧的符号
#如果参数$1不为空,则执行输出;如果$1为空,则报错并退出
#如果$4或$6为空,则输出为白色
c_s_info() {
	if [ $# -ge 2 ] && [ $# -le 10 ]
	then
		s_line $1 "$3" "$4"
		declare -a tmps_front_array=(`echo $7`)
		declare -a tmps_back_array=(`echo $9`)
		tmps_num=0
		while [ $tmps_num -lt ${#tmps_front_array[*]} ]
		do
			#计算外侧要添加的空格的数量
			out_sides_num=0
			out_sides_num=`expr $MAX_LEN - $1`
			out_sides_num=`expr $out_sides_num / 2`
			#计算中间要添加的符号类型的数量
			in_middle_num=0
			in_middle_num=`expr $1 - $2 \* 2 - $BLANK_LEN \* 2 - ${#tmps_front_array[$tmps_num]} - ${#tmps_back_array[$tmps_num]}`
			#输出外侧前面的空格
			s_re $out_sides_num
			#输出前面的符号
			s_re $2 "$3" "$4"
			#输出内侧前面的空格
			s_re $BLANK_LEN
			#输出前面的信息
			if [ ${tmps_front_array[$tmps_num]} ]
			then
				s_re 1 "${tmps_front_array[$tmps_num]}" "$8"
			fi
			#输出中间的符号类型
			s_re $in_middle_num "$5" "$6"
			#输出后面的信息
			if [ ${tmps_back_array[$tmps_num]} ]
			then
				s_re 1 "${tmps_back_array[$tmps_num]}" "${10}"
			fi
			#输出内侧后面的空格
			s_re $BLANK_LEN
			#输出后面的符号
			s_re $2 "$3" "$4"
			#输出外侧后面的空格
			s_re $out_sides_num
			echo ""
			s_line $1 "$3" "$4"
			tmps_num=`expr $tmps_num + 1`
		done
	else
		err_par_num "C_S_Info" "$#"
	fi
}
####################函数c_s_info(len,sides_len,sides_sym,sides_color,middle_sym,middle_color,front_info,front_color,back_info,back_color)####################