首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash中的参数解析

bash中的参数解析
EN

Stack Overflow用户
提问于 2013-01-04 15:07:31
回答 2查看 8.6K关注 0票数 4

我对bash还不熟悉。需要对以下问题提出建议。

所以我想以这种方式执行脚本

代码语言:javascript
复制
./myscript --bootstrap bootstrap.exe --vmmount ./vmmount --image /dev/sdb2 --target-exe installer.exe [--internal-exe] param1 param2 param3 ...

我做过的参数解析器:

代码语言:javascript
复制
VMMOUNT=""
BOOTSTRAP=""
IMAGE_FILE=""
TARGET_EXE=""
INTERNAL_EXE=""
while : ; do
if [ "$1" = "--vmmount" ] ; then
    [ -n "${VMMOUNT}" ] && usage
    VMMOUNT="$2"
    shift
    shift
elif [ "$1" = "--bootstrap" ] ; then
    [ -n "${BOOTSTRAP}" ] && usage
    BOOTSTRAP="$2"
    shift
    shift
elif [ "$1" = "--image" ] ; then
    [ -n "${IMAGE_FILE}" ] && usage
    IMAGE_FILE="$2"
    shift
    shift       
elif [ "$1" = "--target-exe" ] ; then
    [ -n "${TARGET_EXE}" ] && usage
    TARGET_EXE="$2"
    shift
    shift
elif [ "$1" = "--internal-exe" ] ; then
    [ -n "${INTERNAL_EXE}" ] && usage
    INTERNAL_EXE="true"
    shift
    shift
else
    break
fi
done
my_method "${IMAGE_FILE}" "${VMMOUNT}" "${BOOTSTRAP}" "${TARGET_EXE}" "${INTERNAL_EXE}" 

现在我在解析param1和param2等参数时遇到了困惑,如何解析它们呢?我可以使用$@将参数作为数组或任何其他有效的方式接受吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-04 15:36:20

代码语言:javascript
复制
VMMOUNT=""
BOOTSTRAP=""
IMAGE_FILE=""
TARGET_EXE=""
INTERNAL_EXE=""
while : ; do
  case "$1" in 
    --vmmount)
       [ -n "${VMMOUNT}" ] && usage
       VMMOUNT="$2"
       shift 2 ;;
    --bootstrap)
       [ -n "${BOOTSTRAP}" ] && usage
       BOOTSTRAP="$2"
       shift 2 ;;
    --image)
       [ -n "${IMAGE_FILE}" ] && usage
       IMAGE_FILE="$2"
       shift 2 ;;    
    --target-exe)
       [ -n "${TARGET_EXE}" ] && usage
       TARGET_EXE="$2"
       shift 2 ;;
    --internal-exe)
       [ -n "${INTERNAL_EXE}" ] && usage
       INTERNAL_EXE="true"
       shift ;;
    *)
       break ;;
  esac
done
my_method "${IMAGE_FILE}" "${VMMOUNT}" "${BOOTSTRAP}" "${TARGET_EXE}" "${INTERNAL_EXE}" "$@"

不要忘了用双引号将$@括起来。

票数 5
EN

Stack Overflow用户

发布于 2013-01-04 15:11:05

我建议您使用getopt来解析您的命令行论证,而不是手动编写它。这应该会节省很多时间。

还显示在How do I parse command line arguments in Bash?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14152712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档