⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shtool

📁 This program is a RADIUS RFC-compliant daemon, which is derived from original Livingston Enterprise
💻
📖 第 1 页 / 共 5 页
字号:
        str_usage="[-l|--language <lang>] [-n|--name <name>] [-p|--prefix <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase <knob>] [-d|--display <type>] <file>"        arg_spec="1="        opt_spec="l:n:p:s:i:e.d:"        opt_alias="l:language,n:name,p:prefix,s:set,e:edit,i:increase,d:display"        opt_l="txt"        opt_n="unknown"        opt_p=""        opt_s=""        opt_e="no"        opt_i=""        opt_d="short"        ;;    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 |\      sed -e 's/-/_/g' -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 | sed -e 's/-/_/g'`                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 | sed -e 's/-/_/g'`                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" = . ] && [ ".$opt_ARG_OK" != .yes ]; then        if [ ".$opt_MODE" = ".:" ] || [ ".$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 1fi#   process help optionif [ ".$opt_h" = .yes ]; then    echo "Usage: $toolcmdhelp $str_usage"    exit 0fi#   complain about incorrect number of argumentscase $arg_MODE in    '=' )        if [ $# -ne $arg_NUMS ]; then            echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2            echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2            exit 1        fi        ;;    '+' )        if [ $# -lt $arg_NUMS ]; then            echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2            echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2            exit 1        fi        ;;esac#   establish a temporary file on requestif [ ".$gen_tmpfile" = .yes ]; then    if [ ".$TMPDIR" != . ]; then        tmpdir="$TMPDIR"    elif [ ".$TEMPDIR" != . ]; then        tmpdir="$TEMPDIR"    else        tmpdir="/tmp"    fi    tmpfile="$tmpdir/.shtool.$$"    rm -f $tmpfile >/dev/null 2>&1    touch $tmpfile    chmod 600 $tmpfilefi#   utility function: map string to lower caseutil_lower () {    echo "$1" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'}#   utility function: map string to upper caseutil_upper () {    echo "$1" | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'}#   cleanup procedureshtool_exit () {    rc="$1"    if [ ".$gen_tmpfile" = .yes ]; then        rm -f $tmpfile >/dev/null 2>&1 || true    fi    exit $rc}####  DISPATCH INTO SCRIPT BODY##case $tool inecho )    ##    ##  echo -- Print string with optional construct expansion    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>    ##    text="$*"    #   check for broken escape sequence expansion    seo=''    bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'`    if [ ".$bytes" != .3 ]; then        bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`        if [ ".$bytes" = .3 ]; then            seo='-E'        fi    fi    #   check for existing -n option (to suppress newline)    minusn=''    bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'`    if [ ".$bytes" = .3 ]; then        minusn='-n'    fi    #   determine terminal bold sequence    term_bold=''    term_norm=''    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[Bb]'`" != . ]; then        case $TERM in            #   for the most important terminal types we directly know the sequences            xterm|xterm*|vt220|vt220*)                term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`                term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`                ;;            vt100|vt100*|cygwin)                term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`                term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`                ;;            #   for all others, we try to use a possibly existing `tput' or `tcout' utility            * )                paths=`echo $PATH | sed -e 's/:/ /g'`                for tool in tput tcout; do                    for dir in $paths; do                        if [ -r "$dir/$tool" ]; then                            for seq in bold md smso; do # 'smso' is last                                bold="`$dir/$tool $seq 2>/dev/null`"                                if [ ".$bold" != . ]; then                                    term_bold="$bold"                                    break                                fi                            done                            if [ ".$term_bold" != . ]; then                                for seq in sgr0 me rmso init reset; do # 'reset' is last                                    norm="`$dir/$tool $seq 2>/dev/null`"                                    if [ ".$norm" != . ]; then                                        term_norm="$norm"                                        break                                    fi                                done                            fi                            break                        fi                    done                    if [ ".$term_bold" != . ] && [ ".$term_norm" != . ]; then                        break;                    fi                done                ;;        esac        if [ ".$term_bold" = . ] || [ ".$term_norm" = . ]; then            echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2            term_bold=''            term_norm=''        fi    fi    #   determine user name    username=''    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[uUgG]'`" != . ]; then        username="`(id -un) 2>/dev/null`"        if [ ".$username" = . ]; then            str="`(id) 2>/dev/null`"            if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then                username=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*[0-9]*(//' -e 's/).*$//'`            fi            if [ ".$username" = . ]; then                username="$LOGNAME"                if [ ".$username" = . ]; then                    username="$USER"                    if [ ".$username" = . ]; then                        username="`(whoami) 2>/dev/null |\                                   awk '{ printf("%s", $1); }'`"                        if [ ".$username" = . ]; then                            username="`(who am i) 2>/dev/null |\                                       awk '{ printf("%s", $1); }'`"                            if [ ".$username" = . ]; then                                username='unknown'                            fi                        fi                    fi                fi            fi        fi    fi    #   determine user id    userid=''    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%U'`" != . ]; then        userid="`(id -u) 2>/dev/null`"        if [ ".$userid" = . ]; then            userid="`(id -u ${username}) 2>/dev/null`"            if [ ".$userid" = . ]; then                str="`(id) 2>/dev/null`"                if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then                    userid=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*//' -e 's/(.*$//'`                fi                if [ ".$userid" = . ]; then                    userid=`(getent passwd ${username}) 2>/dev/null | \                            sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`                    if [ ".$userid" = . ]; then                        userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \                                sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`                        if [ ".$userid" = . ]; then                            userid=`(ypcat passwd) 2>/dev/null |                                    grep "^${username}:" | \                                    sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`                            if [ ".$userid" = . ]; then                                userid='?'                            fi                        fi                    fi                fi            fi        fi    fi    #   determine (primary) group id    groupid=''    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[gG]'`" != . ]; then        groupid="`(id -g ${username}) 2>/dev/null`"        if [ ".$groupid" = . ]; then            str="`(id) 2>/dev/null`"            if [ ".`echo $str | grep 'gid[ 	]*=[ 	]*[0-9]*('`" != . ]; then                groupid=`echo $str | sed -e 's/^.*gid[ 	]*=[ 	]*//' -e 's/(.*$//'`            fi            if [ ".$groupid" = . ]; then                groupid=`(getent passwd ${username}) 2>/dev/null | \                         sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`                if [ ".$groupid" = . ]; then                    groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \                             sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`                    if [ ".$groupid" = . ]; then                        groupid=`(ypcat passwd) 2>/dev/null | grep "^${username}:" | \                                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`                        if [ ".$groupid" = . ]; then                            groupid='?'                        fi                    fi                fi            fi        fi    fi    #   determine (primary) group name    groupname=''    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%g'`" != . ]; then

⌨️ 快捷键说明

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