Tôi đã có kịch bản sau vỏ đó là nghĩa vụ chỉ đơn giản là sân khấu một vài Java .ear/file .WAR để JBoss:Sự khác nhau giữa "else if" và "elif" trong bash là gì?
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
Phần đặc biệt gây bối rối cho tôi là cái này:
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
Tôi dường như không thể nhận được elif [ -e hcm.war ]
để hoạt động chính xác trên máy chủ từ xa. Các máy chủ từ xa đang chạy bash 3.2.25 trên redhat (nếu điều đó làm cho bất kỳ sự khác biệt.) Tôi nghi ngờ tôi chỉ thiếu một số chi tiết kịch bản shell bash picky.
Mọi đề xuất?
Bạn đang nói rằng bạn không thể có được 'nếu sau đó ... elif sau đó ... fi' để làm việc? –
Vâng, đó là ý tôi. – emptyset
Cân nhắc tạo thói quen chạy mã thông qua http://shellcheck.net/ trước khi đặt câu hỏi tại đây - có một số lỗi mà nó sẽ bắt gặp. –