#!/bin/bash #----------------------------------------------------------------------------------------------- # Common Shared Functions for Unraid Scripts #----------------------------------------------------------------------------------------------- # Load Master.conf relative to calling script load_master_conf() { local script_dir script_dir="$(cd "$(dirname "${BASH_SOURCE[1]}")" && pwd)" local master_conf="$script_dir/../Master.conf" if [ -f "$master_conf" ]; then source "$master_conf" echo "Loaded Master.conf from $master_conf" else echo "Error: Master.conf not found at $master_conf" exit 1 fi } # Parse CLI arguments (flags + VAR=value overrides) parse_args() { DRY_RUN=${DRY_RUN:-false} for ARG in "$@"; do if [[ "$ARG" == *=* ]]; then local VAR_NAME="${ARG%%=*}" local VAR_VALUE="${ARG#*=}" if declare -p "$VAR_NAME" &>/dev/null; then if [[ "$VAR_NAME" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then printf -v "$VAR_NAME" '%s' "$VAR_VALUE" echo "Overriding $VAR_NAME -> $VAR_VALUE" else echo "Warning: Invalid variable name $VAR_NAME" fi else echo "Warning: Unknown variable $VAR_NAME, ignoring." fi else case "$ARG" in --dry-run|-n) DRY_RUN=true ;; --help|-h) echo "Usage: script [--dry-run|-n] [VAR=value ...]" exit 0 ;; *) echo "Warning: Unknown argument $ARG" ;; esac fi done } # Validate integer (non-negative) validate_int() { local name="$1" local value="$2" if ! [[ "${value:-}" =~ ^[0-9]+$ ]]; then echo "Error: $name must be a non-negative integer." exit 1 fi } # Optional: require variable to be set require_var() { local var="$1" if [[ -z "${!var:-}" ]]; then echo "Error: Required variable $var is not set." exit 1 fi }