使用-z或-n对一个变量判空时, 若直接使用[ -n ${ARG} ]这种形式, 当${ARG}中有空格将会报错,
line 27: [: sd: binary operator expected
需要使用
[[ -n ${ARG} ]] 或 [ -n "${ARG}" ]
完整脚本
# Please define the absolute paths
JAVA_HOME=/opt/java/latest
RUN_BASE=/home/tomcat/run
BUILD_FOLDER=/home/tomcat/builds
ARCHIVE_FOLDER=/home/tomcat/archives
JAVA_OPTS="-server -Xms512m -Xmx512m -XX:MaxNewSize=256m -Djava.awt.headless=true"
start() {
echo -n "[$(date +%Y%m%d-%H%M%S)] Start: "
pid=`ps -ef|grep ${JAR_FILE}|grep -v 'grep'|grep 'java'|awk '{print $2}'`
if [ -z ${pid} ] ; then
echo $1 "$2"
nohup ${JAVA_HOME}/bin/java ${JAVA_OPTS} -jar ${JAR_FILE} "$2" >/dev/null 2>&1 &
else
echo $1' is running at pid: '${pid}
fi
}
stop() {
if [ -z $1 ]; then
exit 1
fi
echo -n "[$(date +%Y%m%d-%H%M%S)] Stop: "
pid=`ps -ef|grep ${JAR_FILE}|grep -v 'grep'|grep 'java'|awk '{print $2}'`
if [ -z $pid ] ; then
echo $1' is not running'
else
echo $1' is running at pid:'${pid}
kill $pid
sleep 5
fi
pid=`ps -ef|grep ${JAR_FILE}|grep -v 'grep'|grep 'java'|awk '{print $2}'`
if [ -z $pid ] ; then
echo 'Done'
else
echo 'Still running, now killing with pid:'${pid}
ps -ef|grep ${JAR_FILE}|grep -v 'grep'|grep 'java'|awk '{print $2}'|xargs kill -s 9
fi
}
restart() {
stop $1
start $1 "$2"
}
deploy() {
# -f filename - Check for regular file existence not a directory
[ -f ${BUILD_FOLDER}/$1 ] || exit 1
stop $1
df -h
echo ''
local BACKUP_FILENAME=$1.$(date +%Y%m%d-%H%M)
echo -n "[$(date +%Y%m%d-%H%M%S)] Deploy: "
echo -n "backup ${BACKUP_FILENAME}... "
mv ${JAR_FILE} ${ARCHIVE_FOLDER}/${BACKUP_FILENAME}
echo -n "copy... "
cp -f ${BUILD_FOLDER}/$1 ${RUN_BASE}/
echo 'done'
start $1 "$2"
}
# -z tests for a null string
if [ -z $1 ]; then
echo $"Usage: $0 {start|stop|restart|deploy} [some.jar] [options]
"
echo $" - option: '--server.port=8080 --dubbo.protocol.port=8081'"
exit 2
elif [ -z $2 ]; then
echo $"Usage: $0 $1 [some.jar] [options]"
exit 2
fi
JAR_FILE=${RUN_BASE}/$2
# -e Check for file existence regardless of type (node, directory, socket)
if [ ! -e ${JAR_FILE} ]; then
echo "File not exists: $JAR_FILE"
if [ ! -e ${BUILD_FOLDER}/$2 ]; then
echo "File not exists: ${BUILD_FOLDER}/$2"
exit 1
fi
echo "Copy from ${BUILD_FOLDER}"
cp -f ${BUILD_FOLDER}/$2 ${RUN_BASE}/
fi
case "$1" in
start)
if [ -z "$3" ]; then
echo $"Usage: $0 $1 $2 [options]"
exit 2
fi
$1 $2 "$3"
;;
stop)
$1 $2
;;
restart)
if [ -z "$3" ]; then
echo $"Usage: $0 $1 $2 [options]"
exit 2
fi
$1 $2 "$3"
;;
deploy)
if [ -z "$3" ]; then
echo $"Usage: $0 $1 $2 [options]"
exit 2
fi
$1 $2 "$3"
;;
*)
echo $"Usage: $0 {start|stop|restart|deploy} $2 [options]"
exit 2
esac
使用示例
tc.sh deploy procyon-commons.jar "--server.port=8084 --dubbo.protocol.port=8085 --procyon.vm_id=01"