2012-03-06 3 views
1

Итак, я пытаюсь использовать использование встроенных getopts в bash для обработки обработки аргументов, за исключением того, что получаю странный результат. Вот мой тестовый скрипт;Bash getopts, удаляющий последний аргумент

#!/bin/sh 

HOST= 
OWNER= 
GROUP= 

while getopts "h:o:g" OPTION; 
    do 
    case $OPTION in 
    h) 
     HOST=$OPTARG 
     ;; 
    o) 
     OWNER=$OPTARG 
     ;; 
    g) 
     GROUP=$OPTARG 
     ;; 
    esac 
done 

echo "$HOST - $OWNER:$GROUP" 

Однако, когда я запускаю скрипт, используя это;

./test.sh -h test.host.com -o skittles -g whatever 

Мой последний аргумент никогда не втягивается и не падает. Мой результат от эха;

test.host.com - skittles: 
         ^where's my group value? O.o 

Кто-нибудь знает, что вызвало бы это?

Спасибо.

ответ

5

Кажется, что вы ожидаете, что -g будет иметь аргумент, но в вашем объявлении вариантов нет «:», относящегося к вашему -g.

Вы должны иметь это:

h:o:g: 
+0

Спасибо, Оуки! Я не знал, что двоеточие должно преуспеть в каждом варианте. Причина, по которой я пропустил это, был из-за этого примера, который я использовал, чтобы попробовать. http://rsalveti.wordpress.com/2007/04/03/bash-parsing-arguments-with-getopts/ – Skittles

+0

Это довольно эксплицитно сказано на странице [bash getopt man] (http://ss64.com/bash /getopts.html): «Если за символом следует двоеточие, ожидается, что параметр имеет аргумент». – Ouki

3

Ваша строка опций отсутствует : после g.

+0

Спасибо Уильям! Прошу прощения, что я не мог согласиться с обоими ответами, поскольку они, очевидно, были правильными. Тем не менее, я ценю ответ. – Skittles

 Смежные вопросы

  • Нет связанных вопросов^_^