#!/bin/bash
source /etc/profile
#一键关闭脚本配置文件
CNF_FILE="stop.cnf"#读取配置文件中配置的服务项
CNF_LINES=(`cat$CNF_FILE`)
COUNT=0
for item in ${CNF_LINES[@]}do((COUNT++))
item=(${item//->/})echo"$COUNT、${item[0]}"
done
#选择需要关闭的服务
read -p 'please make a choice : ' choice
#验证用户输入(必须为小于等于配置文件行数的整数)if[[$choice =~ ^[0-9]+$ ]]
then
if[$choice-gt$COUNT-o $choice-lt 1 ]
then
echo"choice must be between 1 and $COUNT,script will exit"exit 0
fi
elseecho'choice must be a num,script will exit'exit 0
fi
#自定义函数调用服务自带脚本关闭服务function stopSers(){
LINE=$1
LINE=(${LINE//@/})
SERS=${LINE[0]}
SERS=${SERS//,/}
COUNT=0
for item in $SERSdo
RST=`jps -ml|grep -w $item`
if[[$RST]]
then
COUNT=1
break
fi
done
if[$COUNT-eq 1 ]
then
RST=`${LINE[1]}`
echo"STOPPED"elseecho"NONE"
fi
}#自定义函数通过系统通用函数kill关闭服务function killSers(){
LINE=$1
LINE=${LINE//,/}
COUNT=0
for item in $LINEdo
PID=`jps -ml|grep -w $item|awk {'print $1'}`
if[[$PID]]
then
PID=`kill-9 $PID`
((COUNT++))
fi
done
if[$COUNT-gt 0 ]
then
echo"STOPPED"elseecho"NONE"
fi
}#自定义函数根据参数类型和操作字符串关闭服务function stopByLine(){
SIGN=$1TYPE=$2
LINE=$3
case $TYPE in
"STOP")
LINE=${LINE//;/}for item in $LINEdo
RST=`stopSers $item`
item=(${item//@/})
item=${item[0]}
case $RST in
"STOPPED")echo'services_[_'$item'_]_stopped';;"NONE")echo'no_services_[_'$item'_]_existed';;
esac
done
;;"KILL")
RST=`killSers $LINE`
case $RST in
"STOPPED")echo'services_[_'$LINE'_]_stopped';;"NONE")echo'no_services_[_'$LINE'_]_existed';;
esac
;;
esac
}#自定义函数根据用户的选择后关闭服务
COUNT=0
while(($COUNT<$choice))do
LINE=${CNF_LINES[$COUNT]}
LINE=${LINE//->/}
SIGN=${LINE[0]}TYPE=${LINE[1]}
LINE=${LINE[2]}
RST=`stopByLine $SIGN$TYPE$LINE`
for item in $RSTdoecho ${item//_/}
done
((COUNT++))
done