2015-06-21 3 views
0

Я работаю над скриптом bash, и я решил использовать getopts для получения параметров, но цикл, который я использовал, не работает! Может кто-нибудь, пожалуйста, помогите мне?Getopts loop не работает

while getopts "u:p:k:s:t:c:l:" flag 
do 
    echo $flag 
    case "$flag" in 
     k) APIKEY="$OPTARG" 
      ;; 
     s) APISECRET="$OPTARG" 
      ;; 
     u) USERNAME="$OPTARG" 
      ;; 
     p) PASSWORD="$OPTARG" 
      ;; 
     t) TITLE="$OPTARG" 
      ;; 
     c) CATEGORY="$OPTARG" 
      ;; 
     l) LANGUAGE="$OPTARG" 
      ;; 
esac 
done 
shift $((OPTIND-1)) 

Ни одна из указанных выше переменных не установлена.

+0

Как вы подтверждаете, что переменные установлены? Когда я добавляю 'echo $ CATEGORY' и запускаюсь с' sample.sh -c Test', он выдает 'Test'. – choroba

+0

В моем скрипте это не работает. https://github.com/danog/DailyMotionUpload/raw/master/dmUpload.sh – Danogentili

+1

Как вы передаете свои аргументы? Дайте нам пример командной строки – Samuel

ответ

1

Не используйте = с getopts и краткие варианты. Кроме того, если вы хотите предоставить «не-параметры», например. имена файлов (video.mp4 в вашем случае), они должны быть последними, а не перед вариантами (и вам нужно соответствующим образом изменить код); или вы можете обработать их (и shift), прежде чем запускать цикл опций.

dmUpload.sh -u USERNAME -p PASS -k KEY -s SECRET -c CAT -t TILE -l LANG video.mp4 
+0

Кажется, что OP хотел бы использовать позиционные аргументы в качестве дополнительного списка тегов. Затем вы должны сохранить первый вариант как 'infile' и сделать' shift' перед обработкой с 'getopts'. – leesei

+0

Спасибо, сейчас работает! – Danogentili