--- /dev/null
+#!/bin/bash
+# Copyright (C) 2017 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -eE -o pipefail
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
+
+[[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@"
+
+usage() {
+ cat <<EOF
+Usage: ${0##*/} []
+Install or uninstall files to /usr/local/bin
+
+-n|--dry-run Dry run
+-u|--uninstall Uninstall. default is to install
+-h|--help Print help and exit.
+
+Note: Uses GNU getopt options parsing style
+EOF
+ exit $1
+}
+dry=false
+uninstall=false # default
+temp=$(getopt -l help,uninstall,dry-run hun "$@") || usage 1
+eval set -- "$temp"
+while true; do
+ case $1 in
+ -n|--dry-run) dry=true; shift ;;
+ -u|--uninstall) uninstall=true; shift ;;
+ -h|--help) usage ;;
+ --) shift; break ;;
+ *) echo "$0: Internal error! unexpected args: $*" ; exit 1 ;;
+ esac
+done
+
+
+x="$(readlink -f "$BASH_SOURCE")"; cd ${x%/*} # directory of this file
+
+files=()
+for f in *; do
+ if [[ -x $f && ! -d $f && ! -L $f && $f != setup ]]; then
+ files+=($f)
+ fi
+done
+
+if $uninstall; then
+ if $dry; then
+ echo "setup dry run: cd /usr/local/bin"
+ echo "setup dry run: rm -fv ${files[*]}"
+ else
+ cd /usr/local/bin
+ rm -fv ${files[@]}
+ fi
+else
+ if $dry; then
+ echo "setup dry run: install -v ${files[*]} /usr/local/bin"
+ else
+ install -v ${files[@]} /usr/local/bin
+ fi
+fi