Chinaunix

标题: shell中的shift问题 [打印本页]

作者: yj11    时间: 2004-10-25 10:37
标题: shell中的shift问题
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的资料,但还不是很清楚.哪位给讲一下.谢了.
作者: 網中人    时间: 2004-10-25 11:38
标题: shell中的shift问题
參考一下:
http://bbs.chinaunix.net/forum/viewtopic.php?t=191051
作者: yangkundai    时间: 2004-10-25 13:57
标题: shell中的shift问题
这里的shift应该是中止一个参数,来处理传递到脚本的每个参数,以实现while的循环和反馈.
作者: superwater    时间: 2004-10-25 17:07
标题: shell中的shift问题
个人体会,作用基本上是用来处理未知或者可变参数个数的情况, shift一下,游标向后移动一个位置,参数总数减少一个.
作者: 寂寞烈火    时间: 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
作者: biaog    时间: 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 )) 是什么意思啊 ? 得到的是什么结果呢?谢谢了 !
作者: dbcat    时间: 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
作者: biaog    时间: 2005-12-18 13:33
楼上的美女! $(( ))这个命令我知道是什么意思,就是算术替换嘛,
我自己也做过试验,echo $OPTIND得到的结果都是参数的数目+ 1 。我就是不明白$OPTIND变量有什么用?
有shift $(( $OPTIND-1 )) 和没有这个命令得到的结果是相同的,没有达到shift的作用嘛!
谢谢大家了!

[ 本帖最后由 biaog 于 2005-12-18 13:38 编辑 ]
作者: 寂寞烈火    时间: 2005-12-18 13:40
原帖由 biaog 于 2005-12-18 13:33 发表
楼上的美女! $(( ))这个命令我知道是什么意思,就是算术替换嘛,
我自己也做过试验,echo $OPTIND得到的结果都是参数的数目+ 1 。我就是不明白$OPTIND变量有什么用?
有shift $(( $OPTIND-1 )) 和没有这个命令得 ...

官方解释

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

作者: biaog    时间: 2005-12-18 13:53
恩!基本上清楚了OPTIND变量,但是搂主脚本中的shift命令是没有必要的。
Thx all !




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2