Argument parsing in bash
本问题已经有最佳答案,请猛点这里访问。
我是个新手。以下问题需要建议。
所以我想用这种方式执行脚本
1 | ./myscript --bootstrap bootstrap.exe --vmmount ./vmmount --image /dev/sdb2 --target-exe installer.exe [--internal-exe] param1 param2 param3 ... |
我已经完成的参数分析器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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等方面有点困惑,如何解析它们呢?我可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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}""$@" |
别忘了用双引号括起来。
我建议您使用getopt来解析命令行参数,而不是手工编码它。这会节省很多时间。
还显示在如何解析bash中的命令行参数中?