Bash RETVAL是什么意思?

Bash RETVAL是什么意思?,bash,shell,Bash,Shell,我正在尝试为start和stop服务的脚本创建一个模板。 我正在检查模板的tomcatstart和stop,并查看命令RETVAL=$? 这是干什么的?我应该保留它吗? 顺便说一下,我的剧本在下面,以防你们想看 #!/bin/bash #=================================================================================== # # FILE: <script-file-name>.sh # # USAGE

我正在尝试为
start
stop
服务的脚本创建一个模板。 我正在检查模板的
tomcat
start和stop,并查看命令
RETVAL=$?

这是干什么的?我应该保留它吗? 顺便说一下,我的剧本在下面,以防你们想看

#!/bin/bash
#===================================================================================
#
#
FILE: <script-file-name>.sh
#
#
USAGE: <script-file-name>.sh [-d] [-l] [-oD logfile] [-h] [starting directories]
#
# DESCRIPTION: List and/or delete all stale links in directory trees.
#
The default starting directory is the current directory.
#
Don’t descend directories on other filesystems.
#
#
OPTIONS: see function ’usage’ below
# REQUIREMENTS: ---
#
BUGS: ---
#
NOTES: ---
#
AUTHOR: Valter Henrique, valter.henrique@<company>.com
#
COMPANY: <company>
#
VERSION: 1.0
#
CREATED: 03.14.13
#
REVISION: 03.14.13
#===================================================================================
#
# chkconfig: 345 90 12
# description: <service-name> start, stop, restart service
#
# Get function from functions library
. /etc/init.d/functions

folder=/<company>/<service-folder> #folder to the application
service="<service-name>" #name of the service

startup=$folder/start.sh
shutdown=$folder/stop.sh


#=== FUNCTION ================================================================
#
NAME: start
# DESCRIPTION: Start the service <service-name>
# PARAMETER 1: ---
#===============================================================================
start() {

  #----------------------------------------------------------------------
  # logging the start
  #----------------------------------------------------------------------
  initlog -c "echo -n Starting $service:"

  #----------------------------------------------------------------------
  # getting the process PID
  #----------------------------------------------------------------------    
  pid_process=`ps -ef | grep "$folder/<jar>.jar" | grep -v grep |awk -F' ' '{ print $2 }'`;

  if [ $pid_process ]; then
    echo "<service-name> is running!"
    echo "Stop then first!"
  else
    action $"Starting <service-name> service: " su - <user_deployer> -c $startup
    RETVAL=$?
  fi
  #----------------------------------------------------------------------
  # create the lock file
  #----------------------------------------------------------------------
  touch /var/lock/subsys/$service
  success $"Sucess $service startup"
  echo
}

#=== FUNCTION ================================================================
#
NAME: stop
# DESCRIPTION: Stop the service <service-name>
# PARAMETER 1: ---
#===============================================================================
stop() {
  #----------------------------------------------------------------------
  # logging the stop
  #----------------------------------------------------------------------
  initlog -c "echo -n Stopping $service: "
  killproc $service
  #----------------------------------------------------------------------
  # now, delete the lock file
  #----------------------------------------------------------------------
  rm -f /var/lock/subsys/$service
  echo
}

#----------------------------------------------------------------------
# Main Logic
#----------------------------------------------------------------------
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status $service
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac 
exit 0
#/bin/bash
#===================================================================================
#
#
文件:.sh
#
#
用法:.sh[-d][l][oD日志文件][h][起始目录]
#
#描述:列出和/或删除目录树中的所有过时链接。
#
默认的起始目录是当前目录。
#
不要删除其他文件系统上的目录。
#
#
选项:参见下面的函数“用法”
#要求:---
#
错误:---
#
注:---
#
作者:瓦尔特·亨里克,瓦尔特。henrique@.com
#
公司:
#
版本:1.0
#
创建日期:03.14.13
#
修订日期:03.14.13
#===================================================================================
#
#chkconfig:345 90 12
#描述:启动、停止、重新启动服务
#
#从函数库中获取函数
. /etc/init.d/functions
folder=/#应用程序的文件夹
service=”“#服务名称
startup=$folder/start.sh
shutdown=$folder/stop.sh
#==函数================================================================
#
名称:start
#描述:启动服务
#参数1:---
#===============================================================================
开始(){
#----------------------------------------------------------------------
#记录开始时间
#----------------------------------------------------------------------
initlog-c“echo-n正在启动$service:”
#----------------------------------------------------------------------
#获取进程PID
#----------------------------------------------------------------------    
pid|u process=`ps-ef | grep“$folder/.jar”| grep-v grep | awk-F''{print$2}';
如果[$pid_进程];则
“回声”正在运行
echo“先停下来!”
其他的
动作$“启动服务:”su--c$启动
RETVAL=$?
fi
#----------------------------------------------------------------------
#创建锁文件
#----------------------------------------------------------------------
触摸/var/lock/subsys/$service
success$“success$服务启动”
回声
}
#==函数================================================================
#
姓名:停止
#描述:停止服务
#参数1:---
#===============================================================================
停止(){
#----------------------------------------------------------------------
#记录停止
#----------------------------------------------------------------------
initlog-c“echo-n停止$service:”
killproc$服务
#----------------------------------------------------------------------
#现在,删除锁文件
#----------------------------------------------------------------------
rm-f/var/lock/subsys/$service
回声
}
#----------------------------------------------------------------------
#主要逻辑
#----------------------------------------------------------------------
案件“$1”
开始)
开始
;;
(停止)
停止
;;
(状态)
状态$服务
;;
重新启动|重新加载|重新启动)
停止
开始
;;
*)
echo$“用法:$0{start | stop | restart | reload | status}”
出口1
以撒
出口0

$?
给出最后执行的命令的状态。在您的情况下,最后执行的命令是
action….
。此命令的退出状态将出现在
$?
中,稍后将在
RETVAL
变量中捕获该状态。
如果命令成功,
$?
将包含0,否则为非零值。

RETVAL是一个变量。$?正在将最后执行的命令的状态分配给RETVAL变量。

如其他人所述,
$?
是最后一个命令的退出状态

现在,关于你的问题


RETVAL
不在脚本中的任何其他地方使用,但请记住,在bash中,正则变量是全局变量,因此其他函数可以使用它们。如您所见,有一个
success
调用可能会用到它。在我选中的发行版中,
/etc/init.d/functions
不使用此变量,因此该行只是噪声,可以删除。。检查您的分布以了解它的作用。

需要强调的一点是:
$?
在每个命令后都会被覆盖,因此如果您想记住特定命令的状态,需要在命令完成后立即将其值分配给另一个变量(如
RETVAL
)。因为没有其他人提到它,
RETVAL
返回值的缩写。知道*nix关键字的词源有助于我记住它们。