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

如果我执行它,我会得到2 testDirfor$dir0for $it,而不仅仅是testDirfor$dir2for $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 回答