Скрипт Bash с getopt — длинные параметры

до сих пор я редактировал свой сценарий, и он не работает так, как хотелось бы.

Сначала я представлю этот код:

    while true ; do
      case "$1" in
        --mode)
           MODE=$2
           shift 2;         
           ;;
        -l|--login)
           LOGIN=$2 
           shift 2;
           ;;
        -e|--email) 
           EMAIL=$2
           shift 2; 
           ;;
        -r|--repo)
           REPO=$2
           shift 2; 
           ;;
        -p|--project)
           PROJ="$2"
           shift 2;
           ;;
       -h|--help)
           echo "$doShowUsage"
           exit 1
   esac
   break
done

if [ "$MODE" == "doAddRepository" ]; then
        echo " CREATING REPOS!!!"
    doAddRepository "$PROJ" "$REPO"
fi

if [ "$MODE" == "doAddProject" ]; then
    doAddProject "$PROJ"
fi

Как вы можете видеть выше, когда я пишу в cli:

./script.sh --mode doAddProject -p test

Это не сработает, но когда я изменю код для:

  if [ "$MODE" == "doAddProject" ]; then
    doAddProject "$2"
fi

Тогда это работает! Мой вопрос в том, как подключиться к моим функциям? Я представляю ниже 2 из функций.

doAddRepository{
local projectName=$1
local repoName=$2
...
}

doAddProject{
local projectName=$1
...
}

TEMP=`getopt -o m:p:r:h --long mode:,project:,repo:,help -n 'script.sh' -- "$@"`
eval set -- "$TEMP"

person adamos    schedule 10.08.2015    source источник
comment
См. stackoverflow.com/questions/402377/   -  person Hema    schedule 10.08.2015
comment
Я видел эту ссылку, но я не могу найти эту вещь, поэтому я спрашиваю в своей теме об этом...   -  person adamos    schedule 10.08.2015
comment
@ Хема, я не знаю, почему ты упомянул ссылку в своем комментарии   -  person Vishal    schedule 10.08.2015
comment
@adamos, пожалуйста, измените заголовок, вы не используете getopt в этом скрипте   -  person Vishal    schedule 10.08.2015


Ответы (1)


Ваш цикл повторяется только один раз из-за неуместного оператора break. Вы должны разорвать цикл, только если аргумент пуст.

while true ; do
    case "$1" in
        --mode)
            MODE=$2
            shift 2;         
            ;;
        -l|--login)
            LOGIN=$2 
            shift 2;
            ;;
        -e|--email) 
            EMAIL=$2
            shift 2; 
            ;;
        -r|--repo)
            REPO=$2
            shift 2; 
            ;;
        -p|--project)
            PROJ="$2"
            shift 2;
            ;;
       -h|--help)
            echo "$doShowUsage"
            exit 1
            ;;
        '')
            break
            ;;
   esac
done
person Vishal    schedule 10.08.2015