免费注册 查看新帖 |

Chinaunix

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

我要写一个接收用户参数的bash脚本,有几个问题请教高手 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-14 23:55 |只看该作者 |倒序浏览
首先,用户输入命令的格式是这样:

command -arg1 value1 -arg2 value2 -arg3 value3 ...

或这样也可:

command arg1=value1 arg2=value2 arg3=value3 ...

参数有很多个。

我要把这些参数保存为变量,变量名为用户输入的参数名(如arg1),变量值为用户输入的参数值(如value1)。

变量名和变量值都是既定的,程序中会检查,不能随便输入。

任何参数都是可选的,用户可不输入任何参数。

如果用户没有输入任何参数,则首先从系统变量或用户变量中查找是否有这些参数,有则用之。

如果系统变量或用户变量中没有这些参数,脚本将以默认参数执行。

用户输入的参数名/参数值中如果有任何一个不匹配,此参数将被丢弃,以默认参数替代(显示命令帮助是否更好?)。

如果用户只输入-help参数,将显示命令帮助。

参数位置不用顺序排列,但必须按-arg1 value1的格式书写。

收集完参数值后,按既定格式拼装成一个字符串,作为参数传递给另一个命令。

问题只有一个:
如何检查参数并将它们赋予正确的变量?需要用哪些命令?
哪位高手如果能提供一个示例教程最好不过。小弟在此谢过。

[ 本帖最后由 mystlynx 于 2007-10-15 00:08 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-10-15 08:38 |只看该作者

  1. while [ $# -gt 0 ]
  2. do
  3.    case $1 in
  4.         -*)
  5.            arg=$1
  6.            value=$2
  7.            [ ${value:0:1} != "-" -a $# -gt 1 ] && eval "${arg}=${value}" && shift
  8.            shift
  9.            ;;
  10.         *=*)
  11.            arg=${1%=*}
  12.            value=${1#*=}
  13.            eval "${arg}=${value}"
  14.            shift
  15.            ;;
  16.         *)
  17.            shift
  18.            ;;
  19. esac
  20. args=(arg1 arg2 arg3 ...)
  21. values=(value1 value2 value3 ...)
  22. for((i=0;i<${#args[*]};i++))
  23. do
  24.    eval "tmparg=\${${args[$i]}:=${values[$i]}}"
  25. done
  26. #把所有参数的缺省值导入到环境变量中(如果原来环境变量中有这个参数就不替换)
复制代码

这样将用户输出的参数修整后,导入到环境变量中
解释:
首先判断第一个参数是不是以-开头,如果是,表示第二个参数的值,如果第二个参数以-开头,或者只有一个参数了(我这里判断值的第一个字符不能为-),就丢弃这个参数
比如:
command -arg1 value1 -arg2 -arg3 -value3 -arg4
那么,用户输入的-arg2 和 -arg4是被丢弃的,只取有效的arg1 value1 | arg2 value2
如果参数不以-开头,那么判断是否是arg=value这样的,如果是,就分解
否则,就丢弃这个参数
eval "${arg}=${value}" 就会在环境变量中设置arg所表示的字符串作为变量名

[ 本帖最后由 springwind426 于 2007-10-15 08:55 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP