2013-03-14 15 views
6

Sto provando a creare un modello per gli script dei servizi start e stop. Stavo controllando il modello per tomcat avviare e arrestare e vedere il comando RETVAL=$?.Cosa significa RETVAL?

Cosa fa? Dovrei tenerlo? A proposito, la mia sceneggiatura è qui sotto nel caso in cui voi vogliate vederlo.

#!/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, [email protected]<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 
+1

Poiché nessun altro lo ha menzionato, 'RETVAL' è l'abbreviazione di' RETurn VALue'. Conoscere l'etimologia delle parole chiave * nix è ciò che mi aiuta a ricordarle. – NobleUplift

risposta

19

$? indica lo stato dell'ultimo comando eseguito. Nel tuo caso, l'ultimo comando eseguito è stato action..... Lo stato di uscita di questo comando sarà presente in $? che verrà successivamente catturato nella variabile RETVAL. Se il comando ha avuto successo, $? conterrà 0, altrimenti un valore diverso da zero.

+2

Una cosa da sottolineare: '$?' Viene sovrascritto dopo ogni comando, quindi se si desidera ricordare lo stato di un particolare comando, è necessario assegnarne il valore a un'altra variabile (come 'RETVAL') immediatamente dopo il completamento del comando. – chepner

3

RETVAL è una variabile. $? sta assegnando lo stato dell'ultimo comando eseguito alla variabile RETVAL.

2

Come indicato in altri, $? è lo stato di uscita dell'ultimo comando.

Ora, per quanto riguarda la tua domanda ...

RETVAL non viene utilizzato in qualsiasi altro luogo in uno script, ma ricordate, in bash, variabili regolari sono globali in modo che possano essere utilizzate da altre funzioni. Come puoi vedere, c'è una chiamata success che potrebbe usarla. Nella distribuzione ho controllato/etc/init.d/functions non utilizza questa variabile, quindi la linea è solo rumore e può essere rimossa .. controllare la tua distribuzione per vedere cosa fa.