2014-09-23 3 views
0

Я искал вокруг узнал, что getops получает только ноль или один аргумент, но мне действительно нужно, чтобы сделать эту работу,getops 1 вариант получить 2 аргумента

Мне нужно сделать мой сценарий работать так:. /script.sh -a string integer

Что он делает, это написать строку и целое число в текстовый файл.

Я попробовал этот код:

while getopts a:d opt 
do 
case "$opt" in 

a) na1=$OPTARG 
    eval "na2=${OPTIND}" 
    shift 2 
    ;; 

d) ./viewS.sh;; 

esac 
done 

if [ $isdef -eq 0 ] 
then 
    echo "$na1;$na2" >>PBDB.txt 

fi 

я могу написать часть строки в текстовый файл, а число только продолжает заканчиваясь к «3».

образца: ./script.sh -a мощность 0000

результат внутри текстового файла: мощность; 3

какие-либо предложения?

только недавно начал изучать Баш скриптовый

+1

почему на земле вы используете * index * аргумента? –

+0

Вы имеете в виду OPTIND? .. Я думал, что смогу заставить его работать таким образом, я знаю, что он не прав, хотя .. – user3632739

+0

Что делает @KarolyHorvath, так это то, что '$ {OPTIND}' - это следующий индекс, на который нужно смотреть, а не значение этого аргумента , Вы попытались исправить это с помощью 'eval', но пропустили лишний' \ $ 'необходимый. Но это не очень хороший способ сделать это. Вместо этого используйте '$ {@: $ OPTIND: 1}'. Кроме того, я думаю, что вы слишком много меняете. Я думаю, вы хотите «сменить» на «проглотить» один дополнительный аргумент. Хотя лично я считаю, что это плохой дизайн. –

ответ

0

Предполагая, что ваш тег является точным (вы не используете/bin/ш), изменить

eval "na2=${OPTIND}" 

использовать "косвенную переменную"

na2=${!OPTIND} 

С помощью eval вам понадобится eval na2=\$$OPTIND, но это намного уродливее

+0

Мне просто нужно заставить его работать. пока нет профайла. спасибо, что ответили сэром – user3632739

+0

Эт, не «про», просто «правильный» материал. О чем вы возражаете? –

+0

nah .. извините nvm. спасибо за помощь, сэр! он работает сейчас – user3632739