summaryrefslogtreecommitdiff
path: root/debvm-run
diff options
context:
space:
mode:
Diffstat (limited to 'debvm-run')
-rwxr-xr-xdebvm-run66
1 files changed, 47 insertions, 19 deletions
diff --git a/debvm-run b/debvm-run
index 972eac6..c800215 100755
--- a/debvm-run
+++ b/debvm-run
@@ -8,40 +8,68 @@ IMAGE=rootfs.ext2
SSHPORT=
GRAPHICAL=
+nth_arg() {
+ shift "$1"
+ printf "%s" "$1"
+}
+
die() {
echo "$*" 1>&2
exit 1
}
-
usage() {
die "usage: $0 [-g] [-i image] [-s sshport] [-- qemu options]"
}
+usage_error() {
+ echo "error: $*" 1>&2
+ usage
+}
-while test "$#" -gt 0; do
- case "$1" in
- -g)
- GRAPHICAL=1
- shift
- ;;
- -i)
- test "$#" -eq 1 && usage
- IMAGE=$2
- shift 2
+opt_graphical() {
+ GRAPHICAL=1
+}
+opt_image() {
+ IMAGE=$1
+}
+opt_sshport() {
+ SSHPORT=$1
+}
+
+while getopts :gi:s:-: OPTCHAR; do
+ case "$OPTCHAR" in
+ g) opt_graphical ;;
+ i) opt_image "$OPTARG" ;;
+ s) opt_sshport "$OPTARG" ;;
+ -)
+ case "$OPTARG" in
+ help)
+ usage
+ ;;
+ graphical|image|sshport)
+ test "$OPTIND" -gt "$#" && usage_error "missing argument for --$OPTARG"
+ "opt_$OPTARG" "$(nth_arg "$OPTIND" "$@")"
+ OPTIND=$((OPTIND+1))
+ ;;
+ image=*|sshport=*)
+ "opt_${OPTARG%%=*}" "${OPTARG#*=}"
+ ;;
+ *)
+ usage_error "unrecognized option --$OPTARG"
+ ;;
+ esac
;;
- -s)
- test "$#" -eq 1 && usage
- SSHPORT=$2
- shift 2
+ :)
+ usage_error "missing argument for -$OPTARG"
;;
- --)
- shift
- break
+ '?')
+ usage_erro "unrecognized option -$OPTARG"
;;
*)
- usage
+ die "internal error while parsing command options, please report a bug"
;;
esac
done
+shift "$((OPTIND - 1))"
test -f "$IMAGE" || die "image '$IMAGE' not found"
test -s "$IMAGE" || die "image '$IMAGE' is empty"