当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]请教getopts问题
帖子发表于 : 2007-12-28 15:14 
头像

注册: 2006-10-12 1:21
帖子: 512
送出感谢: 0 次
接收感谢: 0 次
小弟初学shell
如何实现类似 801x -u root -p 123456
getopts 的 $OPTARG只能获得一个参数值啊,第二个如何获得?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-12-28 15:28 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
引用:
shift命令执行以后, $@将会保存命令行中剩余的参数, 但是没有之前的$1, 因为被丢弃了.

1 #!/bin/bash
2 # 使用 ./scriptname 1 2 3 4 5 来调用这个脚本
3
4 echo "$@" # 1 2 3 4 5
5 shift
6 echo "$@" # 2 3 4 5
7 shift
8 echo "$@" # 3 4 5
9
10 # 每次"shift"都会丢弃$1.
11 # "$@" 将包含剩下的参数.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-12-28 16:41 
头像

注册: 2006-10-12 1:21
帖子: 512
送出感谢: 0 次
接收感谢: 0 次
还有很多具体搞不来,比如这样一个程序,readbook
要求可以
readbook 路径
readbook -u 读者 路径
readbook -w 欢迎词 路径
readbook -u 读者 -w 欢迎词 路径
readbook -w 欢迎词 -u 读者 路径
引用:
#!/bin/bash
#readbook
while getopts uw: option
do
case $option in
u)
把-u 后的值传给 name
;;
w)
#欢迎词
把-w后的值传给word
;;
esac
done
echo "$name"
echo "$word"
cat $(路径)


跪求,拜托啊~~


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-12-29 22:09 

注册: 2006-07-09 12:22
帖子: 1331
地址: 南京
送出感谢: 0 次
接收感谢: 1
$#获得参数个数,options的位置一般都在奇数位,可以通过$#配合shift去获得前面的options。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-12-30 12:00 
头像

注册: 2006-10-12 1:21
帖子: 512
送出感谢: 0 次
接收感谢: 0 次
aBiNg 写道:
$#获得参数个数,options的位置一般都在奇数位,可以通过$#配合shift去获得前面的options。


但是要是用户写成这样怎么办啊?
readbook -u -w 欢迎词 路径
如何通过位置判断哪个是操作符,哪个是操作值?


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-12-30 17:22 

注册: 2006-07-09 12:22
帖子: 1331
地址: 南京
送出感谢: 0 次
接收感谢: 1
在用户正确输入readbook格式情况下,getopts很有用。例如u,w两个选项:
代码:
#!/bin/bash

lastnumber=$#

while getopts u:w: option
do
  case $option in
    u) name=$OPTARG;;
    w) word=$OPTARG;;
    \?) echo "Error! ... " && exit 1;;
  esac
done

readbook -u $name -w $word $lastnumber


但是getopts除了在你给它的参数之中匹配不到会报错以外,不会帮你去找别的错误。例如输入:
代码:
readbook -u -w 欢迎词 路径

getopts会将"-w"字符赋给$name变量,中介就是$OPTARG,此变量是getopts命令自建的。

所以,排错的任务还得自己完成,至少getopts可能无法胜任了吧,除非你再去判断$OPTARG值中有无连字符,而这样好像又有点得不偿失了。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译