2011-12-19 2 views
2

Я пишу скрипт bash, который принимает параметры. Я использую getopts для его достижения.getopts не работает - bash

#!/bin/bash 

while getopts ":a" opt; do 
    case $opt in 
    a) 
     echo "-a was triggered!" >&2 
     ;; 
    \?) 
     echo "Invalid option: -$OPTARG" >&2 
     ;; 
    esac 
done 

но выше код возврат я эта ошибка.

'etOpts_test.sh: line 4: syntax error near unexpected token `in 
'etOpts_test.sh: line 4: ` case $opt in 

Я использую CentOS 5.5

ответ

1

В строке 4 Вы, вероятно, хотите case "$opt" in (цитата $opt). В противном случае, если он содержит метасимвол, он может выйти из строя.

+0

Я только очищенное тело сценария и он работает сейчас. – pahan

3

Это должно быть : с, не : а обозначать флаг, требующий аргумент, а также знак вопроса не должно быть заключено в кавычки, поскольку это служит в качестве подстановочных символов. Полный код будет (также демонстрирует флаг -h не принимают аргументы):

function usage { 
    echo "usage: ..." 
} 

a_arg= 
while getopts a:h opt; do 
    case $opt in 
    a) 
     a_arg=$OPTARG 
     ;; 
    h) 
     usage && exit 0 
     ;; 
    ?) 
     usage && exit 2 
     ;; 
    esac 
done 
+0

Я считаю, что вы правы. но: работал, я не знаю, почему. Я просто очистил тело скрипта, и теперь он работает. – pahan

+0

pahan - это $ OPTARG, также правильно заполненное «: a»? – bobah