如何将第一个参数与getopts的参数分开?

时间:2011-07-16 05:25:44

标签: bash parameter-passing command-line-arguments getopts

#!/bin/bash

priority=false
it=0
dir=/

while getopts  "p:i" option
do
  case $option in
         i) it=$OPTARG;;
         p) priority=true;;
   esac
done

if [[ ${@:$OPTIND} != "" ]]
then
    dir=${@:$OPTIND}
fi
echo $priority $it $dir

如果我执行它,2 testDir $dir0获得$it,而testDir和{{$dir只获得2 1}} $it。我怎样才能得到预期的行为?

./test.sh -pi 2 testDir
true 0 2 testDir

2 个答案:

答案 0 :(得分:2)

我会这样写:

#!/bin/bash

priority=false
it=0

while getopts ":hpi:" opt; do
    case "$opt" in
        h) echo "usage: $0 ...."; exit 0 ;;
        p) priority=true ;;
        i) it="$OPTARG" ;;
        *) echo "error: invalid option -$OPTARG"; exit 1 ;;
    esac
done

shift $(( OPTIND - 1 ))

dir="${1:-/}"

echo "priority=$priority"
echo "it=$it"
echo "dir=$dir"

答案 1 :(得分:1)

您似乎将getopts的optstring参数设置为错误。您有p:i,而您想要的是pi:,以便-i开关接受参数。