#!/bin/bash --posix set +e usage() { printf "%s\n" \ "Usage: $(basename "${0}") -u -s -w -m --user | -u Example: --user Sbinalla --server | -s Example: --server 0 --workshop-id | -w Example: --workshop-id 450814997 Note: All mod names are converted to lowercase, Arma 3 requires lowercase mod names for linux." } error() { printf "\n%s\n" "$1" >&2 exit 1 } confirmation() { local choice while true; do read -p "${1}" -n 1 -r choice case "${choice}" in y | Y) echo "" return 1 ;; n | N) echo "" return 0 ;; *) echo -e "\nInput must be either y, Y, n, or N" ;; esac done } ## Variable setup SERVERNUM="" STEAMUSER="" WORKSHOPID="" #MODNAME="" # Arg parsing is done here while :; do case $1 in -h | -\? | --help) usage # Display a usage synopsis. exit ;; --) # End of all options. shift break ;; -s | --server) shift SERVERNUM="${1}" ;; -u | --user) shift STEAMUSER="${1}" ;; -w | --workshop-id) shift WORKSHOPID="${1}" ;; # -m | --mod-name) # shift # MODNAME="${1}" # ;; -?*) printf 'Unknown option: %s\n' "$1" >&2 usage error ;; *) # Default case: No more options, so break out of the loop. break ;; esac shift done ## Next chunk is checks to see that variables are passed and match correct arguments etc. [[ "${SERVERNUM}" == "" ]] && error "Error: A server number must be provided" [[ "${SERVERNUM}" =~ [^0-9]+. ]] && error "Error: The argument for server must be a number" [[ "${STEAMUSER}" == "" ]] && error "Error: A steam user must be provided" [[ "${WORKSHOPID}" == "" ]] && error "Error: An argument for workshop-id must be provided" [[ "${WORKSHOPID}" =~ [^0-9]+. ]] && error "Error: The argument for workshop-id must be a number" #[[ "${MODNAME}" == "" ]] && error "Error: An argument for mod-name must be provided" [[ -d ~/Arma/Server-"${SERVERNUM}" ]] || error "Error: Arma Server ${SERVERNUM} does not exist!" ## Converts the modname to lowercase as Arma 3 on linux requires lowercase mod directory names #MODNAME=$(echo "${MODNAME}" | tr '[:upper:]' '[:lower:]') # ## Prefix mod with @ #MODNAME="@${MODNAME}" # Create the mods directory if it doesn't exist [[ -d ~/Arma/Server-"${SERVERNUM}"/mods ]] \ || mkdir -p ~/Arma/Server-"${SERVERNUM}"/mods && echo "Info: Created mods directory as it did not exist" echo "Info: Downloading mod ${WORKSHOPID}" # Download the mod steamcmd +login "${STEAMUSER}" +force_install_dir ~/Arma/Server-"${SERVERNUM}" +workshop_download_item 107410 "${WORKSHOPID}" validate +quit \ && echo && echo "Info: Finished Downloading mod" # Finally install the mod into the mods directory echo "Info: Installing the mod ${WORKSHOPID}" [[ -d "${HOME}/Arma/Server-${SERVERNUM}/mods/${WORKSHOPID}" ]] && rm -rf "${HOME}/Arma/Server-${SERVERNUM}/mods/${WORKSHOPID}" [[ -d ~/Arma/Server-"${SERVERNUM}"/mods/"${WORKSHOPID}" ]] \ || mkdir -p ~/Arma/Server-"${SERVERNUM}"/mods/"${WORKSHOPID}" \ && echo "Info: Created the ${WORKSHOPID} directory within mods" mv "${HOME}/Arma/Server-${SERVERNUM}/steamapps/workshop/content/107410/${WORKSHOPID}"/* "${HOME}/Arma/Server-${SERVERNUM}/mods/${WORKSHOPID}" bikey_location=$(find ~/Arma/Server-"${SERVERNUM}"/mods/"${WORKSHOPID}"/ -name "*.bikey") [[ -z "${bikey_location}" ]] || cp -f "${bikey_location}" "${HOME}/Arma/Server-${SERVERNUM}/keys/$(basename "${bikey_location}")" echo "Info: Successfully installed the mod ${WORKSHOPID} to Server-${SERVERNUM}"