Shell script common template

前端 未结 6 1183
情歌与酒
情歌与酒 2020-12-22 14:58

Millions of developers write shell scripts to solve various types of tasks. I use shell scripts to simplify deployment, life-cycle management, installation or simply as a gl

6条回答
  •  鱼传尺愫
    2020-12-22 15:38

    This is the header of my script shell template (which can be found here: http://www.uxora.com/unix/shell-script/18-shell-script-template).

    It is a man look alike which is used to by usage() to diplsay help as well.

    #!/bin/ksh
    #================================================================
    # HEADER
    #================================================================
    #% SYNOPSIS
    #+    ${SCRIPT_NAME} [-hv] [-o[file]] args ...
    #%
    #% DESCRIPTION
    #%    This is a script template
    #%    to start any good shell script.
    #%
    #% OPTIONS
    #%    -o [file], --output=[file]    Set log file (default=/dev/null)
    #%                                  use DEFAULT keyword to autoname file
    #%                                  The default value is /dev/null.
    #%    -t, --timelog                 Add timestamp to log ("+%y/%m/%d@%H:%M:%S")
    #%    -x, --ignorelock              Ignore if lock file exists
    #%    -h, --help                    Print this help
    #%    -v, --version                 Print script information
    #%
    #% EXAMPLES
    #%    ${SCRIPT_NAME} -o DEFAULT arg1 arg2
    #%
    #================================================================
    #- IMPLEMENTATION
    #-    version         ${SCRIPT_NAME} (www.uxora.com) 0.0.4
    #-    author          Michel VONGVILAY
    #-    copyright       Copyright (c) http://www.uxora.com
    #-    license         GNU General Public License
    #-    script_id       12345
    #-
    #================================================================
    #  HISTORY
    #     2015/03/01 : mvongvilay : Script creation
    #     2015/04/01 : mvongvilay : Add long options and improvements
    # 
    #================================================================
    #  DEBUG OPTION
    #    set -n  # Uncomment to check your syntax, without execution.
    #    set -x  # Uncomment to debug this shell script
    #
    #================================================================
    # END_OF_HEADER
    #================================================================
    

    And here is the usage functions to go with:

      #== needed variables ==#
    SCRIPT_HEADSIZE=$(head -200 ${0} |grep -n "^# END_OF_HEADER" | cut -f1 -d:)
    SCRIPT_NAME="$(basename ${0})"
    
      #== usage functions ==#
    usage() { printf "Usage: "; head -${SCRIPT_HEADSIZE:-99} ${0} | grep -e "^#+" | sed -e "s/^#+[ ]*//g" -e "s/\${SCRIPT_NAME}/${SCRIPT_NAME}/g" ; }
    usagefull() { head -${SCRIPT_HEADSIZE:-99} ${0} | grep -e "^#[%+-]" | sed -e "s/^#[%+-]//g" -e "s/\${SCRIPT_NAME}/${SCRIPT_NAME}/g" ; }
    scriptinfo() { head -${SCRIPT_HEADSIZE:-99} ${0} | grep -e "^#-" | sed -e "s/^#-//g" -e "s/\${SCRIPT_NAME}/${SCRIPT_NAME}/g"; }
    

    Here is what you should obtain:

    # Display help
    $ ./template.sh --help
    
        SYNOPSIS
        template.sh [-hv] [-o[file]] args ...
    
        DESCRIPTION
        This is a script template
        to start any good shell script.
    
        OPTIONS
        -o [file], --output=[file]    Set log file (default=/dev/null)
                                      use DEFAULT keyword to autoname file
                                      The default value is /dev/null.
        -t, --timelog                 Add timestamp to log ("+%y/%m/%d@%H:%M:%S")
        -x, --ignorelock              Ignore if lock file exists
        -h, --help                    Print this help
        -v, --version                 Print script information
    
        EXAMPLES
        template.sh -o DEFAULT arg1 arg2
    
        IMPLEMENTATION
        version         template.sh (www.uxora.com) 0.0.4
        author          Michel VONGVILAY
        copyright       Copyright (c) http://www.uxora.com
        license         GNU General Public License
        script_id       12345
    
    # Display version info
    $ ./template.sh -v
    
        IMPLEMENTATION
        version         template.sh (www.uxora.com) 0.0.4
        author          Michel VONGVILAY
        copyright       Copyright (c) http://www.uxora.com
        license         GNU General Public License
        script_id       12345
    

    You can get the full script template here: http://www.uxora.com/unix/shell-script/18-shell-script-template

提交回复
热议问题