免费注册 查看新帖 |

Chinaunix

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

shell中的shift问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-25 10:37 |只看该作者 |倒序浏览
while getopts f:s:v: OPTION ;
do
  case $OPTION in
    f) a=fff
        aa=$OPTARG;;
    s) b=sss
        bb=$OPTARG;;
    v) c=vvv
        cc=$OPTARG;;
    \?) echo "usage"
        exit 1;;
  esac
done

shift $(( $OPTIND-1 ))

echo "this is f argument,$a,$aa"
echo "this ia s argument,$b,$bb"
echo "this is v argument,$c,$cc"

上面是从书上看到关于getopts的例子,自己改了一下,但有点不清楚,shift用在这里有什么用,看了一些关于shift的资料,但还不是很清楚.哪位给讲一下.谢了.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-10-25 11:38 |只看该作者

shell中的shift问题

參考一下:
http://bbs.chinaunix.net/forum/viewtopic.php?t=191051

论坛徽章:
0
3 [报告]
发表于 2004-10-25 13:57 |只看该作者

shell中的shift问题

这里的shift应该是中止一个参数,来处理传递到脚本的每个参数,以实现while的循环和反馈.

论坛徽章:
0
4 [报告]
发表于 2004-10-25 17:07 |只看该作者

shell中的shift问题

个人体会,作用基本上是用来处理未知或者可变参数个数的情况, shift一下,游标向后移动一个位置,参数总数减少一个.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-10-25 19:47 |只看该作者

shell中的shift问题

shift命令把参数列表左移指定次数.如果shift后没有参数,则左移一次.一旦参数被移动,则这个参数永远被删除,如:
/home/lee#set a b c
/home/lee#shift #后面没参数,则则移动一次
/home/lee#echo $*
b c
/home/lee#shift
/home/lee#echo $*
c
/home/lee#set a b c d e f
/home/lee#shift 2 #指定移动2次
/home/lee#echo $*
c d e f
/home/lee#shift 3 #指定移动3次
/home/lee#echo $*
f

论坛徽章:
0
6 [报告]
发表于 2005-12-18 10:56 |只看该作者
原帖由 yj11 于 2004-10-25 10:37 发表
while getopts f:s:v: OPTION ;
do
  case $OPTION in
    f) a=fff
        aa=$OPTARG;;
    s) b=sss
        bb=$OPTARG;;
    v) c=vvv
        cc=$OPTARG;;
    \?) echo "usage"
    ...

各位大侠们!我想问一下,shift $(( $OPTIND-1 )) 中的$(( $OPTIND-1 )) 是什么意思啊 ? 得到的是什么结果呢?谢谢了 !

论坛徽章:
0
7 [报告]
发表于 2005-12-18 12:48 |只看该作者
原帖由 biaog 于 2005-12-18 10:56 发表

各位大侠们!我想问一下,shift $(( $OPTIND-1 )) 中的$(( $OPTIND-1 )) 是什么意思啊 ? 得到的是什么结果呢?谢谢了 !


自己动动手麻.
http://bbs.chinaunix.net/viewthr ... p;extra=&page=7

论坛徽章:
0
8 [报告]
发表于 2005-12-18 13:33 |只看该作者
楼上的美女! $(( ))这个命令我知道是什么意思,就是算术替换嘛,
我自己也做过试验,echo $OPTIND得到的结果都是参数的数目+ 1 。我就是不明白$OPTIND变量有什么用?
有shift $(( $OPTIND-1 )) 和没有这个命令得到的结果是相同的,没有达到shift的作用嘛!
谢谢大家了!

[ 本帖最后由 biaog 于 2005-12-18 13:38 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-12-18 13:40 |只看该作者
原帖由 biaog 于 2005-12-18 13:33 发表
楼上的美女! $(( ))这个命令我知道是什么意思,就是算术替换嘛,
我自己也做过试验,echo $OPTIND得到的结果都是参数的数目+ 1 。我就是不明白$OPTIND变量有什么用?
有shift $(( $OPTIND-1 )) 和没有这个命令得 ...

官方解释

  1. OPTIND是一个特殊的变量,它的初始值是1,每次getopts处理完一个命令参数后就递增它,得到getopts要处理的下一个参数
复制代码

论坛徽章:
0
10 [报告]
发表于 2005-12-18 13:53 |只看该作者
恩!基本上清楚了OPTIND变量,但是搂主脚本中的shift命令是没有必要的。
Thx all !
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP