Гетоптс с завитком

У меня вопрос, как связать getopts с методом curl в одной функции? Я новичок в написании сценариев bash. Я добавлю свою функцию ниже:

    addProject() {

        addProject_usage() { echo "addProject: [-p <arg>]" 1>&2; exit; }
        read OPTARG
        local OPTIND o p
        local OPTARG
        while getopts ":p:" o; do
            case "${o}" in
                p)
                    p="${OPTARG}"
                   ;;
                *)
                    addProject_usage
                ;;
            esac
        done
        shift $((OPTIND-1))


curl -H "Content-Type:application/json" http://adress.com/api/v3/projects?private_token=$token -d "{ \"name\": \"$p\" }"
}

addProject -p 
addProject

Спасибо за любой совет и помощь! Я не знаю, правильно ли я делаю это, но я так не думаю.

M.


person adamos    schedule 03.08.2015    source источник


Ответы (1)


Я думаю, что сценарий можно было бы несколько упростить:

#!/bin/bash 
#

addProject_usage() { echo "addProject: [-p <arg>]" 1>&2; exit; }

addProject() {

        local p
        p="myPdefault"

        while getopts ":p:" o; do
            case "${o}" in
                p)
                    p="${OPTARG}"
                   ;;
                *)
                    addProject_usage
                ;;
            esac
        done
        shift $((OPTIND-1))


curl -H "Content-Type:application/json" http://adress.com/api/v3/projects?private_token=$token -d "{ \"name\": \"$p\" }"
}

addProject -p foo 
addProject
person pasaba por aqui    schedule 03.08.2015
comment
Пасаба спасибо за быстрый ответ! Как насчет того, чтобы сделать p динамической переменной? Я отредактировал строку p=myPdefault, чтобы она читалась как p, и когда я хочу создать новый проект, я пишу: ./nameofscript.sh -p (должно быть имя $p, но это не работает). Я должен нажать Enter, затем написать в пустой строке название проекта, и оно выглядит так: ./nameofscript.sh -p (нажмите Enter) nameofNewProject [добавлен новый проект и т. д.] [root@root]: ... - person adamos; 03.08.2015
comment
@adamos: p=myPdefault — это значение, которое будет принято, если параметр -p не указан (согласно вашей спецификации использования, -p является необязательным). Вы даже можете удалить эту строку. В этом случае, если -p не указан, json в запросе curl будет {name:}. - person pasaba por aqui; 03.08.2015
comment
@pasaba_por_aqui: Хорошо, я понял, но когда я удаляю переменную опции p, я имею в виду: удалить строку: p=myPdefault и хочу запустить скрипт: ./myscriptname.sh -p blabla Я получил вывод: addProject: [-p ‹arg›] - person adamos; 03.08.2015