4
#!/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

それを実行すると、forとforだけでなく、2 testDirfor$dir0forが得られます。どうすれば期待される動作を得ることができますか?$ittestDir$dir2$it

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

2 に答える 2

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"
于 2011-07-16T12:37:23.630 に答える
1

optstringパラメータがgetopts間違っているようです。がありますがp:i、必要なのはですpi:ので、-iスイッチが引数を取ります。

于 2011-07-16T06:54:19.023 に答える