Skip to content

Instantly share code, notes, and snippets.

@jmatsu
Last active August 29, 2015 14:26
Show Gist options
  • Save jmatsu/d25ce87d76cabcd2580c to your computer and use it in GitHub Desktop.
Save jmatsu/d25ce87d76cabcd2580c to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -x
### for opt-parse
_MY_NAME=$(basename $0)
_MY_LOCATION="$(\cd "$(dirname "${BASH_SOURCE:-${(%):-%N}}")"; _pwd=`pwd`/${_MY_NAME};
\cd "$(dirname `readlink -f ${_pwd} 2> /dev/null||readlink ${_pwd} 2> /dev/null` 2> /dev/null)" ; pwd)"
_MY_VERSION='0.1'
_DEFAULT_ARGS="$@"
show_usage() {
echo "-----------------------"
}
show_version() {
echo "${_MY_VERSION}"
}
function post_proc() {
[ -f $_tempfile ] && rm -f $_tempfile
exit 0
}
function assert_if_needs_one() {
if [ -z "$2" ] || [[ "$2" =~ ^-.* ]]; then
echo "${_MY_NAME}: '$1' requires one argument" > /dev/stderr
exit 1;
fi
_global_opt_flag=1
}
unset _tempfile
trap post_proc 1 2 3 15
## opt-parse
unset _global_opt_flag
for OPT in "$@"
do
[ ! -z "${_global_opt_flag}" ]&&{
_global_opt_flag=
shift 1
continue
}
case "$OPT" in
'-x' ) # -x ARG
assert_if_needs_one "$1" "$2"
# do something
;;
'-y' ) # -y
# do something
:
;;
'-z' ) # -z [ARG]
[[ "$2" =~ ^[a-zA-Z0-9]+ ]] && {
# if given arg
_global_opt_flag=1
} || {
# if no arg (set default value)
:
}
# do something
;;
-*) # unregistered options
_NOT_REGISTERED_OPTS="${_NOT_REGISTERED_OPTS} $1"
;;
*) # arguments which is not option
_NO_OPT_ARGS="${_NO_OPT_ARGS} $1"
;;
esac
shift 1
done
unset _global_opt_flag
set -- $_NO_OPT_ARGS
_tempfile=$(mktemp 2>/dev/null||mktemp -t tmp)
// do something
post_proc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment