1. MENUFILE="$HOME/bin/MENU.txt" 
  2. CURRLEVEL=0 
  3. CURRMENU="menu" 
  4. UPMENU="menu" 
  5. LINEWIDTH=72 
  6. COL=3 
  7.  
  8. ListMenu() 
  9.  
  10. MENURESULT=`cat $MENUFILE | awk -F "|" '$3=="'$CURRMENU'" {printf "%s\n",$2}'
  11. #当前行 
  12. LINE=`cat $MENUFILE | awk -F "|" '$2=="'$CURRMENU'" && $3=="'$UPMENU'" {printf "%s\n",$0}'
  13. COLCOUNT=`echo "$LINE" |awk -F "|" '{print NF}'
  14. if [ $COLCOUNT -eq 4 ] 
  15. then 
  16. MEMO=`echo "$LINE" | awk -F "|" '{print $4}'
  17. else 
  18.     if [ $COLCOUNT -eq 6 ] 
  19.     then 
  20.         MEMO=`echo "$LINE" | awk -F "|" '{print $6}'
  21.     else 
  22.         MEMO="注释" 
  23.     fi 
  24. fi 
  25.  
  26. TOTALNUM=`cat $MENUFILE | awk -F "|" '$3=="'$CURRMENU'" {printf "%s\n",$2}' |wc -l` 
  27. echo "\n\n$UPMENU-$CURRMENU\n说明[$MEMO]" 
  28. if [ $TOTALNUM -gt 20 ] 
  29. then 
  30.     COL=3 
  31. else 
  32.     if [ $TOTALNUM -gt 10 ] 
  33.     then 
  34.         COL=2 
  35.     else 
  36.         COL=1 
  37.     fi 
  38. fi 
  39.  
  40. NUM=1 
  41. echo "******************************************************************************" 
  42. LINECON="" 
  43. EVERYWIDTH=`expr $LINEWIDTH \/ $COL` 
  44. for i in `echo $MENURESULT` 
  45. do 
  46.  
  47.     COMM="printf %2s.%-${EVERYWIDTH}s $NUM $i" 
  48.      
  49.     COMMRESULT=`$COMM` 
  50.      
  51.     LINECON=${LINECON}${COMMRESULT} 
  52.      
  53.     newlineflag=`expr $NUM % $COL` 
  54.     if [ $newlineflag -eq 0 ] 
  55.     then 
  56.         echo "$LINECON" 
  57.         LINECON="" 
  58.     else 
  59.         if [ $NUM -eq $TOTALNUM ] 
  60.         then 
  61.             echo "$LINECON" 
  62.             LINECON=""   
  63.         fi 
  64.     fi 
  65.      
  66.     NUM=$(($NUM + 1)) 
  67. done 
  68. echo "******************************************************************************" 
  69. echo "*                           0.返回上一级                                     *" 
  70. echo "*                           q.退      出                                     *" 
  71. echo "******************************************************************************" 
  72. printf "请选择:" 
  73. NUM=1 
  74. read answer 
  75. if [ $answer = "q" ] 
  76. then 
  77.     exit 
  78. fi 
  79.  
  80. if [ $answer -eq 0 ] 
  81. then 
  82.     CURRMENU=$UPMENU 
  83.     UPMENU=`cat $MENUFILE | awk -F "|" '$2=="'$CURRMENU'" {printf "%s\n",$3}'
  84. else 
  85.     for i in `echo $MENURESULT` 
  86.     do 
  87.         if [ $answer -eq $NUM ] 
  88.             then 
  89.             UPMENU=$CURRMENU 
  90.             CURRMENU=$i  
  91.         fi 
  92.         NUM=$(($NUM + 1)) 
  93.     done 
  94. fi 
  95. clear 
  96.  
  97.  
  98.  
  99. #对当前行内容进行判断了 
  100.  
  101. #echo "LINE[$LINE] COLCOUNT[$COLCOUNT]" 
  102. LINE=`cat $MENUFILE | awk -F "|" '$2=="'$CURRMENU'" && $3=="'$UPMENU'" {printf "%s\n",$0}'
  103. COLCOUNT=`echo "$LINE" |awk -F "|" '{print NF}'
  104.  
  105. if [ $COLCOUNT -ge 5 ] 
  106. then 
  107.     PROGNAME=`echo "$LINE" | awk -F "|" '{print $4}'
  108.     ARGV=`echo "$LINE" | awk -F "|" '{print $5}'
  109.     if [ $ARGV = "-" ] 
  110.     then 
  111.         pid=`ps -ef | grep $PROGNAME | grep -v grep | awk '{print $2}'
  112.     else 
  113.         pid=`ps -ef | grep $PROGNAME | grep $ARGV | grep -v grep | awk '{print $2}'
  114.     fi 
  115.      
  116.     #得到进程号 
  117.     echo "pid[$pid]" 
  118.     if [ NULL"$pid" != NULL ] 
  119.     then 
  120.       #得到进程启动个数 
  121.       PIDNUM=`echo $pid |wc -w` 
  122.         if [ $ARGV = "-" ] 
  123.         then 
  124.             ps -ef | grep $PROGNAME | grep -v grep 
  125.         else 
  126.             ps -ef | grep $PROGNAME | grep $ARGV | grep -v grep 
  127.         fi 
  128.         echo "是否杀掉进程$PROGNAME 进程号[$pid] ,并重启(Y/N)" 
  129.         read answer 
  130.         if [ $answer = "Y" ] 
  131.         then 
  132.             kill -9 $pid 
  133.             i=0 
  134.             while [ $i -lt $PIDNUM ] 
  135.             do 
  136.                 if [ $ARGV = "-" ] 
  137.                 then 
  138.                     $PROGNAME & 
  139.                 else 
  140.                     $PROGNAME $ARGV & 
  141.                 fi 
  142.                 i=$(($i + 1)) 
  143.             done 
  144.             if [ $ARGV = "-" ] 
  145.             then 
  146.                 ps -ef | grep $PROGNAME | grep -v grep 
  147.             else 
  148.                 ps -ef | grep $PROGNAME | grep $ARGV | grep -v grep 
  149.             fi 
  150.             echo "重启后结果,按任意键继续..." 
  151.             read answer 
  152.         fi 
  153.     else 
  154.         echo "进程未启动,不进行重启,请参考改程序日志..." 
  155.         read answer          
  156.     fi 
  157.  
  158.     CURRMENU=$UPMENU 
  159.     UPMENU=`cat $MENUFILE | awk -F "|" '$2=="'$CURRMENU'" {printf "%s\n",$3}'`   
  160. fi 
  161. ListMenu 
  162.  
  163. #main 
  164.  
  165. ListMenu