4

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

パラメータparam1やparam2などの解析に混乱があります。それらを解析する方法は?$@paramsを配列または他の効率的な方法として使用できますか?

4

2 に答える 2

5

手作業でコーディングするのではなく、getoptを使用してコマンドライン引数を解析することをお勧めします。それは多くの時間を節約するはずです。

また、Bash でコマンド ライン引数を解析するにはどうすればよいですか? にも示されています。

于 2013-01-04T07:11:04.797 に答える
5
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}" "$@"

$@二重引用符で囲むことを忘れないでください。

于 2013-01-04T07:36:19.783 に答える