shell入门笔记(更新SVN脚本)

本文介绍了一个用于优化SVN更新及Play框架服务管理的Shell脚本。该脚本实现了服务的启动、停止、重启、状态查询及更新等功能,并通过自定义提示信息简化了操作流程。

这几天接触了一下shell脚本,闲来没事,记录下学习心得:

(脚本功能:优化svn启动 关闭 更新命令,去掉繁杂的系统提示,输出自定义提示信息并加入流程控制)

#chkconfig: 35 85 15
#布署的时候改成对应的项目根目录就OK
. /etc/rc.d/init.d/functions
SHOW_PROJ_NAME=show
MANAGE_PROJ_NAME=manage
BASE_DIRECTORY=/xx/x/qic/web/
#PID_FILE=$DIRECTORY/server.pid
#LOG_FILE=$DIRECTORY/logs/system.out
#play脚本位置
DEAMON=/usr/local/play1.2.x_cust/play
#java安装目录
export JAVA_HOME=/usr/local/jdk1.6.0_33/
export LANG="en_US.UTF-8"
RET_VAL=0;
function start()
{
  #判断"$BASE_DIRECTORY$1/server.pid" 文件是否存在
  if [ -f "$BASE_DIRECTORY$1/server.pid" ]
  then
         failure
         echo "$1服务运行中,请先关闭"
  else
        # echo "开始启动。。。"
        #把启动play时的系统提示转移到/dev/null,当前输入界面只显示自定义提示
         cd $BASE_DIRECTORY$1 && $DEAMON start>/dev/null
         success
         echo "$1服务启动成功"

  fi
}
function stop()
{
  if [ -f "$BASE_DIRECTORY$1/server.pid" ]
  then
        cd $BASE_DIRECTORY$1 && $DEAMON stop>/dev/null;
        sleep 3
        if [ -f "$BASE_DIRECTORY$1/server.pid" ]
           then
           #play 意外中止不会删除pid文件,手动删除
           rm -f $BASE_DIRECTORY$1/server.pid
        fi
        success
        echo "$1停止成功"
  else
        failure
        echo "$1没启动"
  fi

}
function status()
{
   if [ -f "$BASE_DIRECTORY$1/server.pid" ]
    then
         pid=$(cat $BASE_DIRECTORY$1/server.pid)
         $(getMode $1)
         #前一个命令的返回码 这里是 function getMode()的返回值
         mode=$?
         if [ $mode -eq 1 ];
         then
             success
             echo "$1运行中. PID为:$pid,运行模式:生产模式"
         else
             success
             echo "$1运行中. PID为:$pid,运行模式:开发模式"
         fi
         #cat:从命令行给出的文件中读取数据,并将这些数据直接送到标准输出,这里是读取.pid文件的内容
         #cat $BASE_DIRECTORY$1/server.pid
        # echo ""
    else
         failure
         echo "$1未运行"
    fi


}
# 0:开发模式 1 生产模式
function getMode()
{

        #搜索$BASE_DIRECTORY$1/conf/application.conf文件 是否匹配正则"/^application.mode=dev/p" -n 表示字符长度大于0 返回true
       mode=$(sed -n "/^application.mode=dev/p" $BASE_DIRECTORY$1/conf/application.conf)
        #
       if [ ${#mode} -gt 0 ]
       then
           return 0
       else
           #echo "test"
           return 1
       fi
       #mode_in_chinese=$(( "$mode" = "application.mode=dev"?"开发模式":"生产模式" ))

      #echo $mode_in_chinese

       #$($mode = "application.mode=dev") && echo "开发模式2" || echo "生产模式2"
      # return "未知模式"

}

function update()
{
  #-d : 当"$BASE_DIRECTORY" 是一个文件时 返回true
  if [ -d "$BASE_DIRECTORY" ]
  then
       success
       cd $BASE_DIRECTORY && svn update || echo "更新失败" && exit 1
       RET_VAL=0
  else
       failure
       echo "$BASE_DIRECTORY不是目录"
       RET_VAL=1
  fi
  return $RETVAL

}


#-----------shell脚本从这里开始执行-------------
#$#表示包括$0在内的命令行参数的个数。在Shell中,脚本名称本身是$0,剩下的依次是$0、$1、$2…、${10}、${11},等等。$*表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表
case $1 in
'start')
        #start的时候也调用restart 因为当play异常关闭后server.pid还在 此时若调用start命令并不能重启
        $0 restart
;;
'stop')
        stop $SHOW_PROJ_NAME
        stop $MANAGE_PROJ_NAME
;;
'restart')
        stop $SHOW_PROJ_NAME
        sleep 1
        start $SHOW_PROJ_NAME
        sleep 1
        stop $MANAGE_PROJ_NAME
        sleep 1
        start $MANAGE_PROJ_NAME
;;
'status')
        status $SHOW_PROJ_NAME
        status $MANAGE_PROJ_NAME
;;
'update')
        update
;;
*)
        echo "usage: service qic <start|stop|status|restart|update>"
;;
esac
exit 0






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值