linux - shell脚本有两个地方代码读不懂?
伊谢尔伦
伊谢尔伦 2017-04-17 13:37:00
[Linux讨论组]

这个是 suse 11 的 /sbin/service脚本

问题.这两部分的代码是什么意思呢?

  1. if test "${1::1}" = "-"; then

  2. args="${args:+$args }$1"

  3. 脚本里面反复出现的 1>&2 究竟是要输入到哪个文件呢?
    具体上下问在下面贴上

问题.网上有没有专门介绍 /sbin/service 这个脚本功能的文章可以参考一下呢?

linux-d5wb:/sbin # cat service 
#!/bin/sh
#
# /sbin/service        Handle boot and runlevel services
#

#
# Only root should do
#
if test "$(id -u)" -ne 0; then
   echo "${0##*/}: only root can use ${0##*/}" 1>&2
   exit 1
fi

#
# Location of our service scripts
#
RCDIR="/etc/init.d"

#
# Clean environment
#
PATH=/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
test -n "$TERM" || TERM=raw
LANG=POSIX
export PATH TERM LANG

exec_rc ()
{
    env -i LANG=$LANG PATH=$PATH TERM=$TERM ${1+"$@"}
}

usage ()
{
    echo "Usage: ${0##*/} [--help | --status-all | <service> [<args>| --full-restart]]" 1>&2
    exit 1
}

help ()
{
    echo "Usage: ${0##*/} [<options> | <service> [<args> | --full-restart]]"
    echo "Available <options>:"
    echo "  -h,--help        This help."
    echo "  -s,--status-all  List out status of all services."
    echo "Usage for specific <service>:"
    echo "  ${0##*/} service_name argument [option]"
    echo "  ${0##*/} service_name --full-restart"
    echo "  ${0##*/} --full-restart service_name"
    exit 0
}

  status_all=0
full_restart=0
        args=""
while test $# -gt 0; do
    opt=
    if test "${1::1}" = "-"; then
    if test ${#1} -gt 2 -a "${1::2}" = "--" ; then
        opt="${1:2}"
    else
        opt="${1:1}"
    fi
    shift
    else
    args="${args:+$args }$1"
    shift
    continue
    fi

    case "$opt" in
    status-all|s)   status_all=1 ;;
    full-restart) full_restart=1 ;;
    h*)                help ;;
    *)               usage ;;
    esac
done
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
伊谢尔伦

问题:

1 if test "${1::1}" = "-"; then
${string:position:length}在$string中, 从位置$position开始提取长度为$length的子串

2 args="${args:+$args }$1"
${var:+OTHER}如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串

这两个问题都是shell的字符串操作和处理。

3 脚本里面反复出现的 1>&2 究竟是要输入到哪个文件呢?
1表示标准输出,2表示标准错误输出,1>&2表示把标准输出的内容重定向到标准错误输出,这样无论程序是使用了哪种,或两种都使用,我们都可以抓到它的所有输出。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号