#!/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
$dir
和0
获得$it
,而testDir
和{{$dir
只获得2
1}} $it
。我怎样才能得到预期的行为?
./test.sh -pi 2 testDir
true 0 2 testDir
答案 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开关接受参数。