#!/usr/bin/env bash set -Eeuo pipefail trap cleanup SIGINT SIGTERM ERR EXIT script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) usage() { cat << EOF Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-v] [-f] -p param_value -u url Script description here. Available options: -h, --help Print this help and exit -v, --verbose Print script debug info -f, --flag Some flag description -p, --param Some param description -u, --url URL to download the .list file from EOF exit } cleanup() { trap - SIGINT SIGTERM ERR EXIT # script cleanup here } setup_colors() { if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m' else NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW='' fi } msg() { echo >&2 -e "${1-}" } die() { local msg=$1 local code=${2-1} # default exit status 1 msg "$msg" exit "$code" } install_packages() { local packages=("$@") if [[ ${#packages[@]} -gt 0 ]]; then msg "${BLUE}Installing packages:${NOFORMAT} ${packages[*]}" apt update apt install -y "${packages[@]}" else msg "${RED}No packages specified to install.${NOFORMAT}" fi } download_list() { local url=$1 local temp_file=$(mktemp) msg "${BLUE}Downloading .list file from:${NOFORMAT} ${url}" curl -s "$url" -o "$temp_file" || die "Failed to download file from $url" # Read each line from the file and install the package while IFS= read -r line || [[ -n "$line" ]]; do # Skip empty lines or comments (lines starting with '#') [[ -z "$line" || "$line" =~ ^# ]] && continue msg "${GREEN}Installing:${NOFORMAT} $line" apt install -y "$line" done < "$temp_file" # Clean up temporary file rm -f "$temp_file" } parse_params() { # default values of variables set from params flag=0 param='' url='' while :; do case "${1-}" in -h | --help) usage ;; -v | --verbose) set -x ;; --no-color) NO_COLOR=1 ;; -f | --flag) flag=1 ;; -p | --param) param="${2-}" shift ;; -u | --url) # URL to download the .list file url="${2-}" shift ;; -?*) die "Unknown option: $1" ;; *) break ;; esac shift done args=("$@") # check required params and arguments [[ -z "${param-}" ]] && die "Missing required parameter: param" [[ -z "${url-}" ]] && die "Missing required parameter: url" [[ ${#args[@]} -eq 0 ]] && die "Missing script arguments" return 0 } parse_params "$@" setup_colors # script logic here msg "${RED}Read parameters:${NOFORMAT}" msg "- flag: ${flag}" msg "- param: ${param}" msg "- arguments: ${args[*]-}" # Download the .list file and install the packages download_list "$url"