1 #!/bin/bash 2 3 #write by zhumaohai(admin#centos.bz) 4 #author blog: www.centos.bz 5 6 7 #显示菜单(单选) 8 display_menu(){ 9 local soft=$1 10 local prompt="which ${soft} you'd select: " 11 eval local arr=(${${soft}_arr[@]}) 12 while true 13 do 14 echo -e "#################### ${soft} setting #################### " 15 for ((i=1;i<=${#arr[@]};i++ )); do echo -e "$i) ${arr[$i-1]}"; done 16 echo 17 read -p "${prompt}" $soft 18 eval local select=$$soft 19 if [ "$select" == "" ] || [ "${arr[$soft-1]}" == "" ];then 20 prompt="input errors,please input a number: " 21 else 22 eval $soft=${arr[$soft-1]} 23 eval echo "your selection: $$soft" 24 break 25 fi 26 done 27 } 28 29 #把带宽bit单位转换为人类可读单位 30 bit_to_human_readable(){ 31 #input bit value 32 local trafficValue=$1 33 34 if [[ ${trafficValue%.*} -gt 922 ]];then 35 #conv to Kb 36 trafficValue=`awk -v value=$trafficValue 'BEGIN{printf "%0.1f",value/1024}'` 37 if [[ ${trafficValue%.*} -gt 922 ]];then 38 #conv to Mb 39 trafficValue=`awk -v value=$trafficValue 'BEGIN{printf "%0.1f",value/1024}'` 40 echo "${trafficValue}Mb" 41 else 42 echo "${trafficValue}Kb" 43 fi 44 else 45 echo "${trafficValue}b" 46 fi 47 } 48 49 #判断包管理工具 50 check_package_manager(){ 51 local manager=$1 52 local systemPackage='' 53 if cat /etc/issue | grep -q -E -i "ubuntu|debian";then 54 systemPackage='apt' 55 elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat";then 56 systemPackage='yum' 57 elif cat /proc/version | grep -q -E -i "ubuntu|debian";then 58 systemPackage='apt' 59 elif cat /proc/version | grep -q -E -i "centos|red hat|redhat";then 60 systemPackage='yum' 61 else 62 echo "unkonw" 63 fi 64 65 if [ "$manager" == "$systemPackage" ];then 66 return 0 67 else 68 return 1 69 fi 70 } 71 72 73 #实时流量 74 realTimeTraffic(){ 75 local eth="" 76 local nic_arr=(`ifconfig | grep -E -o "^[a-z0-9]+" | grep -v "lo" | uniq`) 77 local nicLen=${#nic_arr[@]} 78 if [[ $nicLen -eq 0 ]]; then 79 echo "sorry,I can not detect any network device,please report this issue to author." 80 exit 1 81 elif [[ $nicLen -eq 1 ]]; then 82 eth=$nic_arr 83 else 84 display_menu nic 85 eth=$nic 86 fi 87 88 local clear=true 89 local eth_in_peak=0 90 local eth_out_peak=0 91 local eth_in=0 92 local eth_out=0 93 94 while true;do 95 #移动光标到0:0位置 96 printf "