系统资源统计
分析系統資源性能瓶頸腳本
一、腳本功能:
1.查看CPU利用率與負載(top、vmstat、sar),腳本中采用vmstat
2.查看磁盤、Inode利用率與I/O負載(df、iostat、iotop、sar、dstat),腳本中采用df、iostat
3.查看內存利用率(free、vmstat),腳本中采用free
4.查看TCP連接狀態(netstat、ss),腳本中采用ss
5.查看CPU與內存占用最高的10個進程(tcp、ps),腳本中采用ps
6.查看網絡流量(ifconfig、iftop、iptraf),腳本中采用ifconfig
二、腳本內容:
vim show_sys_info.sh
#!/bin/bash
#show system information
os_check(){ #檢查linux系統版本
#檢查系統類型
if [ -e /etc/redhat-release ];then #如果存在/etc/redhat-release文件,則獲取文件內容
REDHAT=`cat /etc/redhat-release |cut -d' ' -f1` #獲取/etc/redhat-release文件內容并以空格進行分割后獲取第一列的數據
else #如果不存在/etc/redhat-release文件,則獲取/etc/issue 文件的內容,紅帽版本和德班版本都有這個文件,紅帽班這個文件不存系統類型,德班存在
DEBIAN=`cat /etc/issue |cut -d' ' -f1` #獲取//etc/issue文件內容并以空格進行分割后獲取第一列的數據
fi
#根據系統類型選擇包管理(紅帽為yum,德班為apt-get)
if [ "$REDHAT" == "CentOS" -o "$REDHAT" == "Red" ] ;then #如果是centos系統或者red系統,則使用yum 為包管理
P_M=yum
elif [ "$DEBIAN" == "Ubuntu" -o "$DEBIAN" == "ubuntu" ] ;then #如果是Ubuntu系統或者ubuntu系統,則使用apt-get 為包管理
P_M=apt-get
else #否則答應系統不存在,程序退出,返回1(語句執行成功后,正常應該返回0.此處為異常返回,自定義返回值1)
echo "Operating system does not support."
exit 1
fi
}
account_check(){
#判斷是否為root用戶
if [ "$LOGNAME" != "root" ];then #系統變量$USER或者$LOGNAME都表示當前用戶名,如果當前用戶名不是root,則提示要用root用戶并且退出,返回值2
echo "Please use the root account operation."
exit 2
fi
}
account_check #調用用戶檢查函數
vmstat_check(){ #檢查指定的應用(vmstat)是否安裝,如果沒有則進行安裝
which vmstat &>/dev/null #執行which,命令查看執行的vmstat($1為函數的第一個位置參數,例如:如果為vmstat應用,則函數第一個位置參數傳遞vmstat)
#&>/dev/null為將執行的which命令后輸出的結果重定向到垃圾桶中,即不顯示輸出的結果
#如果存在應用,則命令執行后的返回值為0.否則返回不是0
#vmstat為顯示內存使用情況的工具,一般系統自帶,
if [ $? -ne 0 ];then # $?表示上一條命令的執行后的返回值,如果上一條命令執行后的返回值不是0,則說明沒有找到該應用,進行安裝
echo "vmstat command not found, now the install." #打印說明
sleep 1 #睡1秒
os_check #調用系統檢查函數,函數中定義的變量默認為全局變量,如果不希望是全局變量,則需要用local 定義變量
$P_M install procps -y #安裝procops,即可以找到vmstat
fi
}
vmstat_check #調用vmstat檢查函數
iostat_check(){ #檢查指定的應用(vmstat)是否安裝,如果沒有則進行安裝
which iostat &>/dev/null #執行which,命令查看執行的iostat($1為函數的第一個位置參數,例如:如果為vmstat應用,則函數第一個位置參數傳遞vmstat)
#&>/dev/null為將執行的which命令后輸出的結果重定向到垃圾桶中,即不顯示輸出的結果
#如果存在應用,則命令執行后的返回值為0.否則返回不是0
#iostat為監控系統設備的IO負載情況,iostat首次運行時顯示自系統啟動開始的各項統計信息,之后運行iostat將顯示自上次運行該命令以后的統計信息,一般系統不自帶,需要安裝
if [ $? -ne 0 ];then # $?表示上一條命令的執行后的返回值,如果上一條命令執行后的返回值不是0,則說明沒有找到該應用,進行安裝
echo "iostat command not found, now the install." #打印說明
sleep 1 #睡1秒
os_check #調用系統檢查函數,函數中定義的變量默認為全局變量,如果不希望是全局變量,則需要用local 定義變量
$P_M install sysstat -y #安裝sysstat,即可以找到iostat
fi
}
iostat_check #調用iostat檢查函數
#定義顏色變量
W_C_Red="33[32m" #前景色(文字顏色)紅色
W_C_reset="33[0m" #關閉所有屬性
#獲取cpu負載
get_cpu_load(){
#cpu利用率和負載
echo "------------------------------------------------------------"
local i #定義局部變量i
i=1
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
echo -e "${W_C_Red} 參考值${i} ${W_C_reset}" #打印綠色文字后又恢復原色
IDLE_CPU=`vmstat |awk '{if(NR==3)print $15"%"}'` #使用awk命令獲取第三行以空格分割,第15列的內容,并且后面加上百分號(%)
UITL_CPU=`vmstat |awk '{if(NR==3)print 100-$15"%"}'` #使用awk命令獲取100減去第三行以空格分割,第15列的內容的差值,并且后面加上百分號
USER_CPU=`vmstat |awk '{if(NR==3)print $13"%"}'` #使用awk命令獲取第三行以空格分割,第13列的內容,并且后面加上百分號
SYS_CPU=`vmstat |awk '{if(NR==3)print $14"%"}'` #使用awk命令獲取第三行以空格分割,第14列的內容,并且后面加上百分號
IOWAIT_CPU=`vmstat |awk '{if(NR==3)print $16"%"}'` #使用awk命令獲取第三行以空格分割,第16列的內容,并且后面加上百分號
#打印獲取到的內容
echo "空閑占比:$IDLE_CPU"
echo "使用占比:$UITL_CPU"
echo "用戶使用占比:$USER_CPU"
echo "系統使用占比:$SYS_CPU"
echo "系統等待IO的CPU時間百分比:$IOWAIT_CPU"
let i++ #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#獲取cpu負載,獲取到的是同一條數據
get_cpu_load_one(){
#cpu利用率和負載
echo "------------------------------------------------------------"
local i #定義局部變量i
i=1
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
echo -e "${W_C_Red} 參考值${i} ${W_C_reset}" #打印綠色文字后又恢復原色
vm_data="echo `vmstat`" #vmstat獲取數據
echo ${vm_data} #打印vm_data的值
IDLE_CPU=`${vm_data} |awk '{print $(NF-2)"%"}'` #使用awk命令獲取第一行以空格分割,第倒數第3列的內容,并且后面加上百分號(%)
UITL_CPU=`${vm_data} |awk '{print 100-$(NF-2)"%"}'` #使用awk命令獲取100減去第一行以空格分割,倒數第3列的內容的差值,并且后面加上百分號
USER_CPU=`${vm_data} |awk '{print $(NF-4)"%"}'` #使用awk命令獲取第一行以空格分割,倒數第5列的內容,并且后面加上百分號
SYS_CPU=`${vm_data} |awk '{print $(NF-3)"%"}'` #使用awk命令獲取第一行以空格分割,倒數第4列的內容,并且后面加上百分號
IOWAIT_CPU=`${vm_data} |awk '{print $(NF-1)"%"}'` #使用awk命令獲取第三行以空格分割,倒數第2列的內容,并且后面加上百分號
#打印獲取到的內容
echo "空閑占比:$IDLE_CPU"
echo "使用占比:$UITL_CPU"
echo "用戶使用占比:$USER_CPU"
echo "系統使用占比:$SYS_CPU"
echo "系統等待IO的CPU時間百分比:$IOWAIT_CPU"
let i++ #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#獲取硬盤IO負載
get_disk_load(){
#硬盤IO負載
echo "------------------------------------------------------------"
local i #定義局部變量i
i=1
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
echo -e "${W_C_Red} 參考值${i} ${W_C_reset}" #打印綠色文字后又恢復原色
UTIL_DISK=`iostat -x -k |awk '/^[s|d]/{OFS=": ";print $1,$NF"%"}'` #使用awk命令獲取iostat -x -k命令輸出內容中的以s或d開頭的行,將行以空格或者冒號分割后,打印第一列和最后一列,且后面加上百分號
READ_DISK=`iostat -x -k |awk '/^[s|d]/{OFS=": ";print $1,$6"KB"}'` #使用awk命令獲取iostat -x -k命令輸出內容中的以s或d開頭的行,將行以空格或者冒號分割后,打印第一列和第6列,且后面加上KB
WRITE_DISK=`iostat -x -k |awk '/^[s|d]/{OFS=": ";print $1,$7"KB"}'` #使用awk命令獲取iostat -x -k命令輸出內容中的以s或d開頭的行,將行以空格或者冒號分割后,打印第一列和第7列,且后面加上KB
IOWAIT_CPU=`vmstat |awk '{if(NR==3)print $16"%"}'` #使用awk命令獲取第三行以空格分割,第16列的內容,并且后面加上百分號
#打印獲取到的內容
echo -e "磁盤使用率:"
echo -e "${UTIL_DISK}"
echo -e "系統等待IO的CPU時間百分比:"
echo -e "$IOWAIT_CPU"
echo -e "磁盤IO每秒讀的速度(Read/s):"
echo -e "$READ_DISK"
echo -e "磁盤IO每秒寫的速度(Write/s):"
echo -e "$WRITE_DISK"
let i++ #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#獲取硬盤利用率
get_disk_use(){
#硬盤利用率
DISK_LOG=/tmp/disk_use.tmp #定義硬盤利用率日志記錄文件
#使用fdisk -l命令獲取內容后,使用awk命令獲取其中以Disk開頭,間隔任意多個字符,且出現bytes,并且包含/dev的行,以空格分割,獲取其中第2列的內容,第3列中的整數部分,第四列中的內容,且在第4列內容前加一個空格,其后加上換行符
DISK_TOTAL=`fdisk -l |awk '/^Disk.*bytes/ && //dev/{printf $2" ";printf "%d",$3;printf " "$4"
"}'`
USER_RATE=`df -h |awk '/^/dev/{print int($5)}'` #執行df -h獲取內容后,使用awk獲取其中以/dev開頭的內容,將其以空格分割后,打印第5列中的整數部分
local i #定義局部變量i
for i in ${USER_RATE};do
if [ ${i} -gt 90 ];then #如果變量i的值大于90,則記錄到文件中
PART=`df -h |awk '{if(int($5)=='''${i}''') print $6}'` #如果變量i的值等于awk獲得的第五列的值,則打印獲取第六列的值
echo "$PART = ${i}%" >> $DISK_LOG #追加內容到變量DISK_LOG文件中
fi
done
echo "------------------------------------------------------------"
echo -e "Disk total:
${DISK_TOTAL}" #打印磁盤總量
if [ -f ${DISK_LOG} ] ;then #如果變量DiSK_LOG值對應的文件存在,則cat查看,并且看后刪除
echo "------------------------------------------------------------"
cat ${DISK_LOG}
echo "------------------------------------------------------------"
rm -rf ${DISK_LOG}
else #否則說明不存在大于90%
echo "------------------------------------------------------------"
echo "Disk use rate no than 90% of the partition."
echo "------------------------------------------------------------"
fi
}
#獲取硬盤inode利用率
get_disk_inode(){
#硬盤利用率
INODE_LOG=/tmp/inode_use.tmp #定義硬盤利用率日志記錄文件
INODE_USE=`df -i |awk '/^/dev/{print int($5)}'` #執行df -i獲取內容后,使用awk獲取其中以/dev開頭的內容,將其以空格分割后,打印第5列中的整數部分
local i #定義局部變量i
for i in ${INODE_USE};do
if [ ${i} -gt 90 ];then #如果變量i的值大于90,則記錄到文件中
PART=`df -i |awk '{if(int($5)=='''${i}''') print $6}'` #如果變量i的值等于awk獲得的第五列的值,則打印獲取第六列的值
echo "$PART = ${i}%" >> $INODE_LOG #追加內容到變量DISK_LOG文件中
fi
done
if [ -f ${INODE_LOG} ] ;then #如果變量INODE_LOG值對應的文件存在,則cat查看,并且看后刪除
echo "------------------------------------------------------------"
cat ${INODE_LOG}
echo "------------------------------------------------------------"
rm -rf ${INODE_LOG}
else #否則說明不存在大于90%
echo "------------------------------------------------------------"
echo "Inode use rate no than 90% of the partition."
echo "------------------------------------------------------------"
fi
}
#獲取內存利用率
get_mem_use(){
#內存利用率
echo "------------------------------------------------------------"
local i #定義局部變量i
i=1
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
echo -e "${W_C_Red} 參考值${i} ${W_C_reset}" #打印綠色文字后又恢復原色
MEM_TOTAL=`free -m |awk '{if(NR==2)printf "%.1f",$2/1024}END{print "G"}'` #使用awk命令獲取free -m命令輸出內容中的第二行以空格分割的第二列的值除以1024后取1位小數的浮點數,之后再打印G
MEM_USE=`free -m |awk '{if(NR==2)printf "%.1f",$3/1024}END{print "G"}'` #使用awk命令獲取free -m命令輸出內容中的第二行以空格分割的第3列的值除以1024后取1位小數的浮點數,之后再打印G
MEM_FREE=`free -m |awk '{if(NR==2)printf "%.1f",$4/1024}END{print "G"}'` #使用awk命令獲取free -m命令輸出內容中的第二行以空格分割的第4列的值除以1024后取1位小數的浮點數,之后再打印G
MEM_CACHE=`free -m |awk '{if(NR==2)printf "%.1f",$6/1024}END{print "G"}'` #使用awk命令獲取free -m命令輸出內容中的第二行以空格分割的第6列的值除以1024后取1位小數的浮點數,之后再打印G
#打印獲取到的內容
echo -e "總內存:"
echo -e "${MEM_TOTAL}"
echo -e "已使用內存:"
echo -e "${MEM_USE}"
echo -e "空閑內存:"
echo -e "${MEM_FREE}"
echo -e "已經緩存:"
echo -e "$MEM_CACHE"
let i++ #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#獲取內存利用率,同一條數據
get_mem_use_one(){
#內存利用率
echo "------------------------------------------------------------"
local i #定義局部變量i
i=1
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
echo -e "${W_C_Red} 參考值${i} ${W_C_reset}" #打印綠色文字后又恢復原色
free_data="echo `free -m`" #free -m獲取數據
echo ${free_data} #打印free_data的值
MEM_TOTAL=`${free_data} |awk '{printf "%.1f",$8/1024}END{print "G"}'` #使用awk命令獲取free_data變量中的內容中的以空格分割的第8列的值除以1024后取1位小數的浮點數,之后再打印G
MEM_USE=`${free_data} |awk '{printf "%.1f",$9/1024}END{print "G"}'` #使用awk命令獲取free_data變量中的內容中的以空格分割的第9列的值除以1024后取1位小數的浮點數,之后再打印G
MEM_FREE=`${free_data} |awk '{printf "%.1f",$10/1024}END{print "G"}'` #使用awk命令獲取free_data變量中的內容中的以空格分割的第10列的值除以1024后取1位小數的浮點數,之后再打印G
MEM_CACHE=`${free_data} |awk '{printf "%.1f",$12/1024}END{print "G"}'` #使用awk命令獲取free_data變量中的內容中的以空格分割的第12列的值除以1024后取1位小數的浮點數,之后再打印G
#打印獲取到的內容
echo -e "總內存:"
echo -e "${MEM_TOTAL}"
echo -e "已使用內存:"
echo -e "${MEM_USE}"
echo -e "空閑內存:"
echo -e "${MEM_FREE}"
echo -e "已經緩存:"
echo -e "$MEM_CACHE"
let i++ #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#獲取網絡連接狀態
get_tcp_status(){
#內存利用率
echo "------------------------------------------------------------"
local i #定義局部變量i
i=1
local j #定義局部變量j
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
echo -e "${W_C_Red} 參考值${i} ${W_C_reset}" #打印綠色文字后又恢復原色
COUNT=`ss -ant |awk '!/State/{status[$1]++}END{for(j in status) print j,status[j]}'` #使用awk命令獲取ss -ant命令輸出內容查找不包含State內容的行,以空格分割后獲取第一列數據保存到關聯數據status數組中,關聯數組的索引為第一列的內容,值為對應索引出現的次數
#打印獲取到的內容
echo -e "TCP connection status:
$COUNT"
let i++ #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#獲取占用CPU高的前10個進程
get_cpu_top10(){
#占用CPU高的前10個進程
echo "------------------------------------------------------------"
CPU_LOG=/tmp/cpu_top.tmp #定義cpu_top的緩存文件
local i #定義局部變量i
i=1
local j #定義局部變量i
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
#使用ps aux獲取系統每一個進程的內容
#之后使用awk命令,以空格分割每一行,如果每一行第3列的值大于0.0,則打印每行的第二例、第三列的內容,以及第11列及其以后的內容(如果有)
#11列以后的打印規則:打印到最后一列后加上一個換行符
,不是最后一列不加換行符
#NF為最后一列的列數
#sort -k4 -nr:為將獲取到的內容用以空格分割后,以第四列為排序列,進行比較后倒敘排列
#head -10:為將獲取到的內容取前10行的內容
#最后將獲取到的內容記錄到$CPU_LOG文件中
ps aux |awk '{if($3>0.0){{printf "PID: "$2" CPU: "$3"% -->"}for(j=11;j<=NF;j++)if(j==NF)printf $j"
";else printf $j}}'|sort -k4 -nr|head -10 >$CPU_LOG
if [[ -n `cat $CPU_LOG` ]];then #如果$CPU_LOG文件中的內容的長度不為0,即有內容,則打印顯示相應的內容
echo -e "${W_C_Red} 參考值${i} ${W_C_reset}" #打印綠色文字后又恢復原色
cat $CPU_LOG #顯示$CPU_LOG文件中的內容
else #否則顯示沒有進程使用CPU
echo "NO process using the CPU"
break #退出while循環
fi
let i++ #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#獲取占用內存高的前10個進程
get_mem_top10(){
#占用內存高的前10個進程
echo "------------------------------------------------------------"
MEM_LOG=/tmp/mem_top.tmp #定義mem_top的緩存文件
local i #定義局部變量i
i=1
local j #定義局部變量i
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
#使用ps aux獲取系統每一個進程的內容
#之后使用awk命令,以空格分割每一行,如果每一行第4列的值大于0.0,則打印每行的第二例、第三列的內容,以及第11列及其以后的內容(如果有)
#11列以后的打印規則:打印到最后一列后加上一個換行符
,不是最后一列不加換行符
#NF為最后一列的列數
#sort -k4 -nr:為將獲取到的內容用以空格分割后,以第四列為排序列,進行比較后倒敘排列
#head -10:為將獲取到的內容取前10行的內容
#最后將獲取到的內容記錄到$MEM_LOG文件中
ps aux |awk '{if($4>0.0){{printf "PID: "$2" Memory: "$4"% -->"}for(j=11;j<=NF;j++)if(j==NF)printf $j"
";else printf $j}}'|sort -k4 -nr|head -10 >$MEM_LOG
if [[ -n `cat $MEM_LOG` ]];then #如果$MEM_LOG文件中的內容的長度不為0,即有內容,則打印顯示相應的內容
echo -e "${W_C_Red} 參考值${i} ${W_C_reset}" #打印綠色文字后又恢復原色
cat $MEM_LOG #顯示$MEM_LOG文件中的內容
else #否則顯示沒有進程使用內存
echo "NO process using the Memory"
break #退出while循環
fi
i=$(($i+1)) #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#獲取網絡流量
get_traffic(){
#查看網絡流量
#判斷輸入的網卡是否存在
while true;do
read -p "Please enter the network card name: " eth
if [ `ifconfig |grep -c "<${eth}>"` -eq 1 ];then #如果查詢到網卡內容的個數等于1則說明輸入的網卡正確,否者讓再次輸入
break
else
echo "Input format error or Don't have the card name,please input again."
fi
done
echo "------------------------------------------------------------"
echo -e "In ------ Out"
local i #定義局部變量i
i=1
while [[ $i -le 3 ]];do #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
#CentOS6和CentOS7 ifconfig輸出進出流量信息位置不同
#ContOS6中RX和TX行號等于8
#ContOS7中RX行號是5,TX行號等于7
#獲取上一秒的輸入輸出流量
OLD_IN=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $4;else if(NR==5)print $6}'` #獲取ifconfig $eth內容后
#使用awk命令將獲取到的內容按照冒號或者空格分割
#并且查找包含bytes的行,如果行號等于8,就打印改行第4列內容
#如果行號是5,就打印改行第6列內容
OLD_OUT=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $9;else if(NR==7)print $6}'`
echo ${OLD_IN}
echo ${OLD_OUT}
sleep 1 #間隔1秒
#獲取下一秒的輸入輸出流量
#每秒的流量就是(下一次減去上一次再除以間隔的秒數)
NEW_IN=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $4;else if(NR==5)print $6}'`
NEW_OUT=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $9;else if(NR==7)print $6}'`
echo ${NEW_IN}
echo ${NEW_OUT}
IN=`awk 'BEGIN{printf "%.4f
",'$((${NEW_IN}-${OLD_IN}))'/1024/128}'` #使用awk的BEGIN,新值減去舊值,除以1024再除以128
#1M帶寬=1024kb/8bit=128KB(1M帶寬對應的下載速度為128KB)
#1024Kbits/s=128KBytes/s
#1024Kbps的全稱為1024Kbits/s,即單位是元,而128KBytes/s的單位是字節,一個字節等于8位元
#有線寬帶的寬帶的換算方法:1Mbps=1024/8(KBps)=128KBps,即128KBytes/s
#50M帶寬對應的下載速度為50*126=6400KB
OUT=`awk 'BEGIN{printf "%.4f
",'$((${NEW_OUT}-${OLD_OUT}))'/1024/128}'`
echo "${IN}MB/s ${OUT}MB/s" #打印相應的值
i=$(($i+1)) #變量i加1賦值給變量i(i自加1)
sleep 1 #睡1秒
done
echo "------------------------------------------------------------"
}
#定義PS3的內容(select選擇的內容提示信息)
PS3="Your choice is: "
#使用while死循環顯示select循環內容
display_select(){
while true;do
select input in cpu_load disk_load disk_use disk_inode mem_use tcp_status cpu_top10 mem_top10 traffic quit;do
#從in后面中選擇一個賦值給input變量
#此處使用case處理input變量對應值的情況
case $input in
cpu_load)
#調用獲取cpu負載函數
get_cpu_load_one
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
disk_load)
#調用獲取硬盤IO負載函數
get_disk_load
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
disk_use)
#調用獲取硬盤利用率函數
get_disk_use
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
disk_inode)
#調用獲取硬盤inode利用率函數
get_disk_inode
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
mem_use)
#調用獲取內存利用率函數
get_mem_use
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
tcp_status)
#調用獲取網絡連接狀態函數
get_tcp_status
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
cpu_top10)
#調用獲取占用CPU高的前10個進程函數
get_cpu_top10
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
mem_top10)
#調用獲取占用內存高的前10個進程函數
get_mem_top10
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
traffic)
#調用獲取網絡流量函數
get_traffic
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
quit)
exit #退出腳本,退出程序
;; #case一個條件結束符號
*) #*代表其他任意內容,如果是其他任意內容,則提示輸入相應內容且退出循環
echo "------------------------------------------------------------"
echo "Please enter the number."
echo "------------------------------------------------------------"
break #跳出select循環,繼續while循環
;; #case一個條件結束符號
esac
done
done
}
$1 #腳本第一個位置參數,賦值后調用相應的函數
:wq!:保存
chmod a+xshow_sys_info.sh :給腳本show_sys_info.sh賦可執行權限
./show_sys_info.shdisplay_select :執行腳本,調用display_select函數
總結
- 上一篇: mysql 怎么创建B Tree索引_M
- 下一篇: go float64 转int_深挖Go