免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2023 | 回复: 4
打印 上一主题 下一主题

shell命令参数处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-12 08:02 |只看该作者 |倒序浏览
想自己实现一条命令testcmd,带参数选项 -a  -b  -c

使用循环可一个一个判断参数;

但命令可以多个选项写在一起, testcmd -ab    这种应该怎么实现?

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
2 [报告]
发表于 2009-07-12 10:46 |只看该作者
可以用case,当参数为-ab 或-abc时然后执行什么..是这样?

论坛徽章:
0
3 [报告]
发表于 2009-07-12 11:08 |只看该作者
如果参数选项较多, 需要考虑 多个选项的排列组合,case情况太多了

论坛徽章:
0
4 [报告]
发表于 2009-07-12 11:59 |只看该作者
由于 -a -b ==  -ab
可见,单独的每个选项 -a -b -c -d -e ... -fs -gzb 等等,必须是集合{a, b, c, d, e, fs,  gzb, ...}中的元素。
并且集合内任意n(n>=2)个元素的组合,不能分解为集合内其它m(m>=1)个元素的组合。

考虑最简单的一种情况,集合内元素全是单字符元素(lz情况应该在此范围内)。
由于选项都是单字符,那么首先获取-abcdefgh中-后面的字符串,解析为a, b, c, d, e, f, g ,h
-abc -mn -sk 经过解析后得到a, b, c, m, n , s, k
再进行switch case

OK.

论坛徽章:
0
5 [报告]
发表于 2009-07-12 13:15 |只看该作者
原帖由 Germin 于 2009-7-12 08:02 发表
想自己实现一条命令testcmd,带参数选项 -a  -b  -c

使用循环可一个一个判断参数;

但命令可以多个选项写在一起, testcmd -ab    这种应该怎么实现?

getopts
==Example

while getopts abo: c
do
      case $c in
     a | b)   FLAG=$c;;
     o)       OARG=$OPTARG;;
     \?)      echo $USAGE
        exit 2;;
     esac
done
shift `expr $OPTIND - 1`


cmd -a -b -o "xxx z yy" filename
cmd -a -b -o "xxx z yy" -- filename
cmd -ab -o xxx,z,yy filename
cmd -ab -o "xxx z yy" filename
cmd -o xxx,z,yy -b -a filename

[ 本帖最后由 fargo 于 2009-7-12 13:18 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP