带有getopt的Bash脚本 - 长选项

时间:2015-08-10 06:51:47

标签: bash shell scripting flags 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

然后它的作品!我的问题是如何连接我的功能?我在下面的两个函数中提出。

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"

1 个答案:

答案 0 :(得分: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