Как мне отделить первый аргумент от аргумента getopts? - PullRequest
4 голосов
/ 16 июля 2011
#!/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 для $it. Как я могу получить ожидаемое поведение?

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

Ответы [ 2 ]

2 голосов
/ 16 июля 2011

Я бы написал так:

#!/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 голос
/ 16 июля 2011

У вас, кажется, неверный параметр optstring для getopts.У вас есть p:i, в то время как вы хотите pi:, так что ключ -i принимает аргумент.

...