From 8a82f3fe954de22bcfd6e6a9ec985b59e023367a Mon Sep 17 00:00:00 2001 From: Nathaniel Landau Date: Sat, 7 Feb 2015 11:24:57 -0500 Subject: [PATCH] Refactored to be based on scriptTemplate.sh --- setupScripts/homebrew.sh | 246 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 235 insertions(+), 11 deletions(-) diff --git a/setupScripts/homebrew.sh b/setupScripts/homebrew.sh index 13b84be..4943011 100755 --- a/setupScripts/homebrew.sh +++ b/setupScripts/homebrew.sh @@ -1,25 +1,109 @@ #!/usr/bin/env bash +# ################################################## +# My Generic BASH script template +# +version="1.0.0" # Sets version variable for this script +# +scriptTemplateVersion="1.0.1" # Version of scriptTemplate.sh +# that this script is based on +# +# A Bash script boilerplate. Allows for common functions, logging, tmp +# file creation, CL option passing, and more. +# +# For logging levels use the following functions: +# - header: Prints a script header +# - input: Ask for user input +# - success: Print script success +# - info: Print information to the user +# - notice: Notify the user of something +# - warning: Warn the user of something +# - error: Print a non-fatal error +# - die: A fatal error. Will exit the script +# - debug: Debug information +# - verbose: Debug info only printed when 'verbose' flag is set to 'true'. +# +# HISTORY: +# +# * 2015-02-07 - v1.0.0 - First Creation +# +# ################################################## + +# Source Scripting Utilities +# ----------------------------------- +# If these can't be found, update the path to the file +# ----------------------------------- if [ -f "../lib/utils.sh" ]; then source "../lib/utils.sh" else - echo "You must have utils.sh to run. Exiting." - exit + echo "Please find the file util.sh and add a reference to it in this script. Exiting." + exit 1 fi +# trapCleanup Function +# ----------------------------------- +# Any actions that should be taken if the script is prematurely +# exited. Always call this function at the top of your script. +# ----------------------------------- +function trapCleanup() { + echo "" + if is_dir "${tmpDir}"; then + rm -r "${tmpDir}" + fi + die "Exit trapped." # Edit this if you like. +} + +# Set Flags +# ----------------------------------- +# Flags which can be overridden by user input. +# Default values are below +# ----------------------------------- +quiet=0 +printLog=0 +verbose=0 +force=0 +strict=0 + + +# Set Local Variables +# ----------------------------------- +# A set of variables used by many scripts +# ----------------------------------- + +# Set Script name and location variables +scriptName=`basename ${0}` # Full name +scriptBasename="$(basename ${scriptName} .sh)" # Strips '.sh' from name +scriptPath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Set time stamp +now=$(date +"%m-%d-%Y %r") +# Set hostname +thisHost=$(hostname) + +# Create temp directory with three random numbers and the process ID +# in the name. This directory is removed automatically at exit. + tmpDir="/tmp/${scriptName}.$RANDOM.$RANDOM.$RANDOM.$$" + (umask 077 && mkdir "${tmpDir}") || { + die "Could not create temporary directory! Exiting." + } + +# Logging +# ----------------------------------- +# Log is only used when the '-l' flag is set. +# +# To never save a logfile change variable to '/dev/null' +# Save to Desktop use: $HOME/Desktop/${scriptBasename}.log +# Save to standard user log location use: $HOME/Library/Logs/${scriptBasename}.log +# ----------------------------------- +logFile="$HOME/Library/Logs/${scriptBasename}.log" + + +function mainScript() { +############## Begin Script Here ################### # Set Variables LISTINSTALLED="brew list" INSTALLCOMMAND="brew install" -install-ffmpeg () { - seek_confirmation "Install ffmpeg?" - if is_confirmed; then - if type_not_exists 'ffmpeg'; then - brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libcaca --with-libass --with-frei0r --with-libquvi --with-libvidstab --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-openssl --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools --with-x265 - fi - fi -} - RECIPES=( autoconf automake @@ -58,10 +142,150 @@ RECIPES=( z ) +install-ffmpeg () { + if type_not_exists 'ffmpeg'; then + seek_confirmation "Install ffmpeg?" + if is_confirmed; then + brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libcaca --with-libass --with-frei0r --with-libquvi --with-libvidstab --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-openssl --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools --with-x265 + fi + fi +} + +htopPermissions() { + seek_confirmation "Set HTOP permissions?" + if is_confirmed; then + if [[ "$(type -P $binroot/htop)" && "$(stat -L -f "%Su:%Sg" "$binroot/htop")" != "root:wheel" || ! "$(($(stat -L -f "%DMp" "$binroot/htop") & 4))" ]]; then + notice "Updating htop permissions" + sudo chown root:wheel "$binroot/htop" + sudo chmod u+s "$binroot/htop" + fi + fi +} + # Run Functions hasHomebrew brewMaintenance doInstall install-ffmpeg +htopPermissions brewCleanup + + + +############## End Script Here ################### +} + +############## Begin Options and Usage ################### + + +# Print usage +usage() { + echo -n "${scriptName} [OPTION]... [FILE]... + +This is my script template. + + Options: + -u, --username Username for script + -p, --password User password + -f, --force Skip all user interaction. Implied 'Yes' to all actions + -q, --quiet Quiet (no output) + -l, --log Print log to file + -s, --strict Exit script with null variables. i.e 'set -o nounset' + -v, --verbose Output more information. (Items echoed to 'verbose') + -h, --help Display this help and exit + --version Output version information and exit +" +} + +# Iterate over options breaking -ab into -a -b when needed and --foo=bar into +# --foo bar +optstring=h +unset options +while (($#)); do + case $1 in + # If option is of type -ab + -[!-]?*) + # Loop over each character starting with the second + for ((i=1; i < ${#1}; i++)); do + c=${1:i:1} + + # Add current char to options + options+=("-$c") + + # If option takes a required argument, and it's not the last char make + # the rest of the string its argument + if [[ $optstring = *"$c:"* && ${1:i+1} ]]; then + options+=("${1:i+1}") + break + fi + done + ;; + + # If option is of type --foo=bar + --?*=*) options+=("${1%%=*}" "${1#*=}") ;; + # add --endopts for -- + --) options+=(--endopts) ;; + # Otherwise, nothing special + *) options+=("$1") ;; + esac + shift +done +set -- "${options[@]}" +unset options + +# Print help if no arguments were passed. +# Uncomment to force arguments when invoking the script +# [[ $# -eq 0 ]] && set -- "--help" + +# Read the options and set stuff +while [[ $1 = -?* ]]; do + case $1 in + -h|--help) usage >&2; safeExit ;; + --version) echo "$(basename $0) $version"; safeExit ;; + -u|--username) shift; username=$1 ;; + -p|--password) shift; password=$1 ;; + -v|--verbose) verbose=1 ;; + -l|--log) printLog=1 ;; + -q|--quiet) quiet=1 ;; + -s|--strict) strict=1;; + -f|--force) force=1 ;; + --endopts) shift; break ;; + *) die "invalid option: '$1'." ;; + esac + shift +done + + +############## End Options and Usage ################### + + + + +# ############# ############# ############# +# ## TIME TO RUN THE SCRIPT ## +# ## ## +# ## You shouldn't need to edit anything ## +# ## beneath this line ## +# ## ## +# ############# ############# ############# + +# Trap bad exits with your cleanup function +trap trapCleanup INT TERM + +# Exit on error. Append ||true if you expect an error. +set -o errexit + +# Exit on empty variable +if [ "${strict}" = "1" ]; then + set -o nounset +fi + +# Bash will remember & return the highest exitcode in a chain of pipes. +# This way you can catch the error in case mysqldump fails in `mysqldump |gzip` +set -o pipefail + + +mainScript # Run your script + +safeExit # Exit cleanly \ No newline at end of file