我有以下shell脚本,应该简单地将几个Java.ear / .war文件放到JBoss中:
SUCCESS=false DEPLOY_PATH=/apps/jboss/server/default/deploy E_NOARGS=75 M_USAGE="usage: $0 {rcm|hcm}" M_MISSING_RCM="missing: rcm.war file not present" M_MISSING_HCM="missing: hcm.ear or hcm.war file not present" if [ -z "$1" ] then echo $M_USAGE exit $E_NOARGS else M_START="deploying $1 ..." M_FINISH="finished deploying $1" fi until [ -z "$1" ] do echo $M_START case "$1" in rcm*) # do a hot-deploy of the rcm.war file # TODO: test if rcm.war file is present,error out if not if [ -e rcm.war ] then cp -v rcm.war $DEPLOY_PATH/rcm.war SUCCESS=true else echo $M_MISSING_RCM fi ;; hcm*) # do a shutdown,deploy hcm.war,and restart jboss ps -ef | awk '/jboss/{print $2}' | xargs kill -s KILL HCM_DEPLOYED=false if [ -e hcm.ear ] then cp -v hcm.ear $DEPLOY_PATH/hcm.ear HCM_DEPLOYED=true else if [ -e hcm.war ] then cp -v hcm.war $DEPLOY_PATH/hcm.war HCM_DEPLOYED=true else echo $M_MISSING_HCM fi fi if $HCM_DEPLOYED ; then # TODO: detect the hostname nohup /apps/jboss/bin/run.sh -b <HOSTNAME> & &> /dev/null SUCCESS=true fi ;; *) echo $M_USAGE exit 1 esac shift done if $SUCCESS ; then echo $M_FINISH fi
特别是令我困惑的部分是:
if [ -e hcm.ear ] then cp -v hcm.ear $DEPLOY_PATH/hcm.ear HCM_DEPLOYED=true else if [ -e hcm.war ] then cp -v hcm.war $DEPLOY_PATH/hcm.war HCM_DEPLOYED=true else echo $M_MISSING_HCM fi fi
我似乎无法使elif [-e hcm.war]在远程服务器上正常工作。远程服务器在redhat上运行bash 3.2.25(如果有任何区别)。我怀疑我只是丢失了一些挑剔的bash shell脚本细节。
有什么建议么?
您发布的代码似乎工作。
elif .. fi和else之间有区别;如果… fi一个真正的elif … fi会比你的代码少一个fi。
你的代码发布,问:“如果hcm.ear存在,那么检查是否有一个hcm.war”。那是你要的吗?测试的其他逻辑路径是“如果hcm.ear不存在,那么检查是否有hcm.war”。
那个替代逻辑路径看起来像
if [ -e hcm.ear ] ; then cp -v hcm.ear $DEPLOY_PATH/hcm.ear HCM_DEPLOYED=true elif [ -e hcm.war ] ; then cp -v hcm.war $DEPLOY_PATH/hcm.war HCM_DEPLOYED=true else echo $M_MISSING_HCM fi
我希望这有帮助。