LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 744|回复: 5

处理命令行选项遭遇的问题

[复制链接]
发表于 2006-2-23 15:44:23 | 显示全部楼层 |阅读模式
有一段脚本:
while [ -n "$(echo $1 |grep '^-')" ]; do
    case $1 in
        -a) echo 'option -a' ;;
        -b) echo 'option -b' ;;
        -c) echo 'option -c' ;;
        * ) opti=$?
            echo $1
            echo $opti
            echo 'usage: optiondeal [-a] [-b] [-c] args...'
            exit 1
    esac
    shift
done

是用来练习处理命令行选项用的,脚本名字叫optiondeal,碰上挺奇怪一事儿,我用-a,-b,-c试没问题,能够正常显示,然后随便用其他参数试比如-d,-m,-z,-r等也没问题,能够正常显示,可唯独用选项-n试就不正常了,执行完脚本之后没有任何输出,直接出现系统提示符,就像没做过任何执行一样,不知是哪里出了问题, 难道是bash的bug不成?我在FC1上和Gentoo2005.1上都试过这个脚本,都有同样的问题,他们的bash版本分别是2.05b和3.1.8,请大家帮我看看。
发表于 2006-2-23 16:40:27 | 显示全部楼层
-e也不行的,这两个都是echo的选项。

只能 echo X$1 | sed 's/^X//'
回复 支持 反对

使用道具 举报

发表于 2006-2-23 16:46:32 | 显示全部楼层
-n 测试shell script语法结构,只读取shell script但不执行
是不是这个问题啊。。。
回复 支持 反对

使用道具 举报

发表于 2006-2-23 16:48:32 | 显示全部楼层
-n 测试shell script语法结构,只读取shell script但不执行
是不是这个问题啊。。。
回复 支持 反对

使用道具 举报

发表于 2006-2-23 17:11:21 | 显示全部楼层
不是,主要是echo的问题。

if echo X$1 | sed 's/^X//' | grep -q '^-' ; then
blah
blah
fi

就可以了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 09:20:31 | 显示全部楼层
多谢seamonkey兄的指点,的确是echo的参数问题,我把这点给忽略了,看来只能用老兄的方法来解决这个问题了。:thank
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表