- MENUFILE="$HOME/bin/MENU.txt"
- CURRLEVEL=0
- CURRMENU="menu"
- UPMENU="menu"
- LINEWIDTH=72
- COL=3
- ListMenu()
- {
- MENURESULT=`cat $MENUFILE | awk -F "|" '$3=="'$CURRMENU'" {printf "%s\n",$2}'`
- #当前行
- LINE=`cat $MENUFILE | awk -F "|" '$2=="'$CURRMENU'" && $3=="'$UPMENU'" {printf "%s\n",$0}'`
- COLCOUNT=`echo "$LINE" |awk -F "|" '{print NF}'`
- if [ $COLCOUNT -eq 4 ]
- then
- MEMO=`echo "$LINE" | awk -F "|" '{print $4}'`
- else
- if [ $COLCOUNT -eq 6 ]
- then
- MEMO=`echo "$LINE" | awk -F "|" '{print $6}'`
- else
- MEMO="注释"
- fi
- fi
- TOTALNUM=`cat $MENUFILE | awk -F "|" '$3=="'$CURRMENU'" {printf "%s\n",$2}' |wc -l`
- echo "\n\n$UPMENU-$CURRMENU\n说明[$MEMO]"
- if [ $TOTALNUM -gt 20 ]
- then
- COL=3
- else
- if [ $TOTALNUM -gt 10 ]
- then
- COL=2
- else
- COL=1
- fi
- fi
- NUM=1
- echo "******************************************************************************"
- LINECON=""
- EVERYWIDTH=`expr $LINEWIDTH \/ $COL`
- for i in `echo $MENURESULT`
- do
- COMM="printf %2s.%-${EVERYWIDTH}s $NUM $i"
- COMMRESULT=`$COMM`
- LINECON=${LINECON}${COMMRESULT}
- newlineflag=`expr $NUM % $COL`
- if [ $newlineflag -eq 0 ]
- then
- echo "$LINECON"
- LINECON=""
- else
- if [ $NUM -eq $TOTALNUM ]
- then
- echo "$LINECON"
- LINECON=""
- fi
- fi
- NUM=$(($NUM + 1))
- done
- echo "******************************************************************************"
- echo "* 0.返回上一级 *"
- echo "* q.退 出 *"
- echo "******************************************************************************"
- printf "请选择:"
- NUM=1
- read answer
- if [ $answer = "q" ]
- then
- exit
- fi
- if [ $answer -eq 0 ]
- then
- CURRMENU=$UPMENU
- UPMENU=`cat $MENUFILE | awk -F "|" '$2=="'$CURRMENU'" {printf "%s\n",$3}'`
- else
- for i in `echo $MENURESULT`
- do
- if [ $answer -eq $NUM ]
- then
- UPMENU=$CURRMENU
- CURRMENU=$i
- fi
- NUM=$(($NUM + 1))
- done
- fi
- clear
- #对当前行内容进行判断了
- #echo "LINE[$LINE] COLCOUNT[$COLCOUNT]"
- LINE=`cat $MENUFILE | awk -F "|" '$2=="'$CURRMENU'" && $3=="'$UPMENU'" {printf "%s\n",$0}'`
- COLCOUNT=`echo "$LINE" |awk -F "|" '{print NF}'`
- if [ $COLCOUNT -ge 5 ]
- then
- PROGNAME=`echo "$LINE" | awk -F "|" '{print $4}'`
- ARGV=`echo "$LINE" | awk -F "|" '{print $5}'`
- if [ $ARGV = "-" ]
- then
- pid=`ps -ef | grep $PROGNAME | grep -v grep | awk '{print $2}'`
- else
- pid=`ps -ef | grep $PROGNAME | grep $ARGV | grep -v grep | awk '{print $2}'`
- fi
- #得到进程号
- echo "pid[$pid]"
- if [ NULL"$pid" != NULL ]
- then
- #得到进程启动个数
- PIDNUM=`echo $pid |wc -w`
- if [ $ARGV = "-" ]
- then
- ps -ef | grep $PROGNAME | grep -v grep
- else
- ps -ef | grep $PROGNAME | grep $ARGV | grep -v grep
- fi
- echo "是否杀掉进程$PROGNAME 进程号[$pid] ,并重启(Y/N)"
- read answer
- if [ $answer = "Y" ]
- then
- kill -9 $pid
- i=0
- while [ $i -lt $PIDNUM ]
- do
- if [ $ARGV = "-" ]
- then
- $PROGNAME &
- else
- $PROGNAME $ARGV &
- fi
- i=$(($i + 1))
- done
- if [ $ARGV = "-" ]
- then
- ps -ef | grep $PROGNAME | grep -v grep
- else
- ps -ef | grep $PROGNAME | grep $ARGV | grep -v grep
- fi
- echo "重启后结果,按任意键继续..."
- read answer
- fi
- else
- echo "进程未启动,不进行重启,请参考改程序日志..."
- read answer
- fi
- CURRMENU=$UPMENU
- UPMENU=`cat $MENUFILE | awk -F "|" '$2=="'$CURRMENU'" {printf "%s\n",$3}'`
- fi
- ListMenu
- }
- #main
- ListMenu
转载于:https://blog.51cto.com/bxbx258/744982