2013-01-04 39 views
3

我是bash的新手。需要针对以下问题提出建议。在bash中解析的参数

所以,我想用这种方式

./myscript --bootstrap bootstrap.exe --vmmount ./vmmount --image /dev/sdb2 --target-exe installer.exe [--internal-exe] param1 param2 param3 ... 

参数解析器我已经做执行脚本:

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}" 

现在我在解析参数参数1混乱和参数2等等如何解析他们?我可以使用[email protected]将参数作为数组还是其他有效方式使用?

+0

而不是所有'elif'语句,使用'case'。 – Barmar

回答

4
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}" "[email protected]" 

还显示别忘了用双引号括[email protected]

+0

@ Barmar谢谢!这是工作 :) – Reuben