shtool

来自「监控软件rrdtools」· 代码 · 共 1,047 行 · 第 1/3 页

TXT
1,047
字号
#!/bin/sh####  GNU shtool -- The GNU Portable Shell Tool##  Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>####  See http://www.gnu.org/software/shtool/ for more information.##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.####  Version:  1.6.2 (02-Nov-2002)##  Contents: 4/19 available modules######  This program is free software; you can redistribute it and/or modify##  it under the terms of the GNU General Public License as published by##  the Free Software Foundation; either version 2 of the License, or##  (at your option) any later version.####  This program is distributed in the hope that it will be useful,##  but WITHOUT ANY WARRANTY; without even the implied warranty of##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU##  General Public License for more details.####  You should have received a copy of the GNU General Public License##  along with this program; if not, write to the Free Software##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.####  NOTICE: Given that you include this file verbatim into your own##  source tree, you are justified in saying that it remains separate##  from your package, and that this way you are simply just using GNU##  shtool. So, in this situation, there is no requirement that your##  package itself is licensed under the GNU General Public License in##  order to take advantage of GNU shtool.######  Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]####  Available commands:##    echo       Print string with optional construct expansion##    install    Install a program, script or datafile##    mkdir      Make one or more directories##    path       Deal with program paths####  Not available commands (because module was not built-in):##    mdate      Pretty-print modification time of a file or dir##    table      Pretty-print a field-separated list as a table##    prop       Display progress with a running propeller##    move       Move files with simultaneous substitution##    mkln       Make link with calculation of relative paths##    mkshadow   Make a shadow tree through symbolic links##    fixperm    Fix file permissions inside a source tree##    rotate     Logfile rotation##    tarball    Roll distribution tarballs##    subst      Apply sed(1) substitution operations##    guessos    Simple operating system guesser##    arx        Extended archive command##    slo        Separate linker options by library class##    scpp       Sharing C Pre-Processor##    version    Maintain a version information file##if [ $# -eq 0 ]; then    echo "$0:Error: invalid command line" 1>&2    echo "$0:Hint:  run \`$0 -h' for usage" 1>&2    exit 1fiif [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then    echo "This is GNU shtool, version 1.6.2 (02-Nov-2002)"    echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>"    echo "Report bugs to <bug-shtool@gnu.org>"    echo ''    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"    echo ''    echo 'Available global <options>:'    echo '  -v, --version   display shtool version information'    echo '  -h, --help      display shtool usage help page (this one)'    echo '  -d, --debug     display shell trace information'    echo '  -r, --recreate  recreate this shtool script via shtoolize'    echo ''    echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'    echo '  echo     [-n|--newline] [-e|--expand] [<str> ...]'    echo '  install  [-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy]'    echo '           [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>]'    echo '           [-o|--owner <owner>] [-g|--group <group>] [-e|--exec'    echo '           <sed-cmd>] <file> [<file> ...] <path>'    echo '  mkdir    [-t|--trace] [-f|--force] [-p|--parents] [-m|--mode'    echo '           <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir>'    echo '           [<dir> ...]'    echo '  path     [-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename]'    echo '           [-m|--magic] [-p|--path <path>] <str> [<str> ...]'    echo ''    echo 'Not available <cmd-name> (because module was not built-in):'    echo '  mdate    [-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits]'    echo '           [-f|--field-sep <str>] [-o|--order <spec>] <path>'    echo '  table    [-F|--field-sep <sep>] [-w|--width <width>] [-c|--columns'    echo '           <cols>] [-s|--strip <strip>] <str><sep><str>...'    echo '  prop     [-p|--prefix <str>]'    echo '  move     [-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve]'    echo '           <src-file> <dst-file>'    echo '  mkln     [-t|--trace] [-f|--force] [-s|--symbolic] <src-path>'    echo '           [<src-path> ...] <dst-path>'    echo '  mkshadow [-v|--verbose] [-t|--trace] [-a|--all] <src-dir> <dst-dir>'    echo '  fixperm  [-v|--verbose] [-t|--trace] <path> [<path> ...]'    echo '  rotate   [-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files'    echo '           <count>] [-s|--size <size>] [-c|--copy] [-r|--remove]'    echo '           [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>]'    echo '           [-b|--background] [-d|--delay] [-p|--pad <len>] [-o|--owner'    echo '           <owner>] [-g|--group <group>] [-m|--mode <mode>] [-M|--migrate'    echo '           <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]'    echo '  tarball  [-t|--trace] [-v|--verbose] [-o|--output <tarball>]'    echo '           [-c|--compress <prog>] [-d|--directory <dir>] [-u|--user'    echo '           <user>] [-g|--group <group>] [-e|--exclude <pattern>]'    echo '           <path> [<path> ...]'    echo '  subst    [-v|--verbose] [-t|--trace] [-n|--nop] [-s|--stealth]'    echo '           [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>]'    echo '           [-f|--file <cmd-file>] [<file>] [...]'    echo '  guessos  '    echo '  arx      [-t|--trace] [-C|--command <cmd>] <op> <archive> [<file>'    echo '           ...]'    echo '  slo      [-p|--prefix <str>] -- -L<dir> -l<lib> [-L<dir> -l<lib>'    echo '           ...]'    echo '  scpp     [-v|--verbose] [-p|--preserve] [-f|--filter <filter>]'    echo '           [-o|--output <ofile>] [-t|--template <tfile>] [-M|--mark'    echo '           <mark>] [-D|--define <dname>] [-C|--class <cname>]'    echo '           <file> [<file> ...]'    echo '  version  [-l|--language <lang>] [-n|--name <name>] [-p|--prefix'    echo '           <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase'    echo '           <knob>] [-d|--display <type>] <file>'    echo ''    exit 0fiif [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then    echo "GNU shtool 1.6.2 (02-Nov-2002)"    exit 0fiif [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then    shtoolize -oshtool echo install mkdir path    exit 0fiif [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then    shift    set -xfiname=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`case "$name" in    echo|install|mkdir|path )        #   implicit tool command selection        tool="$name"        ;;    * )        #   explicit tool command selection        tool="$1"        shift        ;;esacarg_spec=""opt_spec=""gen_tmpfile=no####  DISPATCH INTO SCRIPT PROLOG##case $tool in    echo )        str_tool="echo"        str_usage="[-n|--newline] [-e|--expand] [<str> ...]"        arg_spec="0+"        opt_spec="n.e."        opt_alias="n:newline,e:expand"        opt_n=no        opt_e=no        ;;    install )        str_tool="install"        str_usage="[-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file> ...] <path>"        arg_spec="1+"        opt_spec="v.t.d.c.C.s.m:o:g:e+"        opt_alias="v:verbose,t:trace,d:mkdir,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec"        opt_v=no        opt_t=no        opt_d=no        opt_c=no        opt_C=no        opt_s=no        opt_m="0755"        opt_o=""        opt_g=""        opt_e=""        ;;    mkdir )        str_tool="mkdir"        str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir> [<dir> ...]"        arg_spec="1+"        opt_spec="t.f.p.m:o:g:"        opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group"        opt_t=no        opt_f=no        opt_p=no        opt_m=""        opt_o=""        opt_g=""        ;;    path )        str_tool="path"        str_usage="[-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename] [-m|--magic] [-p|--path <path>] <str> [<str> ...]"        gen_tmpfile=yes        arg_spec="1+"        opt_spec="s.r.d.b.m.p:"        opt_alias="s:suppress,r:reverse,d:dirname,b:basename,m:magic,p:path"        opt_s=no        opt_r=no        opt_d=no        opt_b=no        opt_m=no        opt_p="$PATH"        ;;    -* )        echo "$0:Error: unknown option \`$tool'" 2>&1        echo "$0:Hint:  run \`$0 -h' for usage" 2>&1        exit 1        ;;    * )        echo "$0:Error: unknown command \`$tool'" 2>&1        echo "$0:Hint:  run \`$0 -h' for usage" 2>&1        exit 1        ;;esac####  COMMON UTILITY CODE###   commonly used ASCII valuesASC_TAB="	"ASC_NL=""#   determine name of toolif [ ".$tool" != . ]; then    #   used inside shtool script    toolcmd="$0 $tool"    toolcmdhelp="shtool $tool"    msgprefix="shtool:$tool"else    #   used as standalone script    toolcmd="$0"    toolcmdhelp="sh $0"    msgprefix="$str_tool"fi#   parse argument specification stringeval `echo $arg_spec |\      sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`#   parse option specification stringeval `echo h.$opt_spec |\      sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`#   parse option alias stringeval `echo h:help,$opt_alias |\      tr 'x-' 'x_' | sed -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`#   interate over argument lineopt_PREV=''while [ $# -gt 0 ]; do    #   special option stops processing    if [ ".$1" = ".--" ]; then        shift        break    fi    #   determine option and argument    opt_ARG_OK=no    if [ ".$opt_PREV" != . ]; then        #   merge previous seen option with argument        opt_OPT="$opt_PREV"        opt_ARG="$1"        opt_ARG_OK=yes        opt_PREV=''    else        #   split argument into option and argument        case "$1" in            --[a-zA-Z0-9]*=*)                eval `echo "x$1" |\                      sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'`                opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`                eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"                ;;            --[a-zA-Z0-9]*)                opt_OPT=`echo "x$1" | cut -c4-`                opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`                eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"                opt_ARG=''                ;;            -[a-zA-Z0-9]*)                eval `echo "x$1" |\                      sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \                          -e 's/";\(.*\)$/"; opt_ARG="\1"/'`                ;;            -[a-zA-Z0-9])                opt_OPT=`echo "x$1" | cut -c3-`                opt_ARG=''                ;;            *)                break                ;;        esac    fi    #   eat up option    shift    #   determine whether option needs an argument    eval "opt_MODE=\$opt_MODE_${opt_OPT}"    if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then        if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then            opt_PREV="$opt_OPT"            continue        fi    fi    #   process option    case $opt_MODE in        '.' )            #   boolean option            eval "opt_${opt_OPT}=yes"            ;;        ':' )            #   option with argument (multiple occurances override)            eval "opt_${opt_OPT}=\"\$opt_ARG\""            ;;        '+' )            #   option with argument (multiple occurances append)            eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\""            ;;        * )            echo "$msgprefix:Error: unknown option: \`$opt_OPT'" 1>&2            echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2            exit 1            ;;    esacdoneif [ ".$opt_PREV" != . ]; then    echo "$msgprefix:Error: missing argument to option \`$opt_PREV'" 1>&2    echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2    exit 1

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?