Опции bash getopts для различных функций

как я могу заставить это работать? Я хочу использовать разные функции для своей команды, моя проблема в том, как передать аргументы функции add.sh? find.sh работает нормально, но первые две команды говорят, что нет аргумента для опции -v / -a. Что я делаю не так?

while getopts v:a:s opt
do
case "$opt" in

v) ./view.sh;;

a) ./add.sh;;

s) ./find.sh;;

person user3632739    schedule 22.09.2014    source источник
comment
В чем именно тут вопрос? Вы сказали getopts, что для параметров -v и -a требуются аргументы. Вы передаете аргументы этому сценарию? Если вы это сделаете, вы не должны получить ошибку от getopts. Вы также, кажется, спрашиваете, как передать этот аргумент (или другие аргументы?) вызываемой функции. Это два очень разных вопроса. На первый ответ частично можно получить, прочитав, как работает getopts. Ответом на второй является отказ от запуска сценария до тех пор, пока вы не соберете все аргументы.   -  person Etan Reisner    schedule 22.09.2014
comment
Я пытаюсь передать аргументы сценариям -v и -a, я не уверен, что сценарии правильно принимают аргументы, вот сценарий для view.sh (awk -F ; '{printf Record: %d \n\t%s\n\t%s\n\t%s, %s, %s\n\t%s\n================== ========\n\n, NR, $1, $2, $3, $4, $5, $6}' $BOOK ; echo Нажмите Q, чтобы выйти и вернуться в меню. ) | меньше   -  person user3632739    schedule 22.09.2014
comment
У меня есть сценарий верхнего уровня, в котором я могу нормально запускать все сценарии, но у меня проблемы с getops. У меня есть скрипт toplevel.sh для запуска всех остальных скриптов, теперь я пытаюсь сделать еще один скрипт только для getops, я настроил его так, чтобы при отсутствии аргументов скрипт getops автоматически открывал скрипт верхнего уровня. Я все еще пытаюсь этому научиться. Спасибо за помощь сэр   -  person user3632739    schedule 22.09.2014
comment
Как вы называете свой сценарий верхнего уровня? Какой аргумент этому сценарию view.sh вы ожидаете передать из сценария верхнего уровня $BOOK? Вы вызываете сценарии с аргументами так же, как вы передаете аргументы командам в оболочке, вы просто помещаете их в командную строку.   -  person Etan Reisner    schedule 22.09.2014
comment
Я все еще экспериментирую, сэр, спасибо за ответы, я хотел бы поблагодарить вас, но не знаю, как ..   -  person user3632739    schedule 22.09.2014


Ответы (1)


Если вы хотите передать параметр -v скрипту view.sh, сделайте так:

while getopts v:a:s opt
do
    case "$opt" in
    v) ./view.sh -v "$OPTARG";;
    a) ./add.sh -a "$OPTARG";;
    s) ./find.sh;;
    esac
done

Если вы хотите также передать «другие» аргументы в view.sh, вам придется немного потрудиться. Вы можете просто передать все аргументы с помощью ./view.sh "$@";;, но выборочно сложнее.

person Jonathan Leffler    schedule 22.09.2014