#!/bin/bash FILENAME="serverconfig" ETC_DIR="/etc/$FILENAME" ENV_FILE="$ETC_DIR/.env" LOG="/var/log/$FILENAME.log" SCRIPT_FILE="/usr/local/bin" INFO="\e[34mINFO\e[0m" SUCCESS="\e[32mSUCCESS\e[0m" WARN="\e[33mWARN\e[0m" ERROR="\e[31mERROR\e[0m" DEBUG="\e[35mDEBUG\e[0m" ACTION="\e[36mACTION\e[0m" INFO_FLAG=1 WARN_FLAG=2 ERROR_FLAG=3 DEBUG_FLAG=4 ACTION_FLAG=5 SUCCESS_FLAG=6 DATETIME_FORMAT="%d-%m-%Y %H:%M:%S" info_print() { local message="$1" local level="${2:-1}" local write_log="${3:-true}" case $level in 1|--) local level=$INFO;; 2) local level=$WARN;; 3) local level=$ERROR;; 4) local level=$DEBUG;; 5) local level=$ACTION;; 6) local level=$SUCCESS;; *);; esac local output="[$(date +"$DATETIME_FORMAT")] - $level: $message" if [ "$write_log" = true ]; then echo -e "$output" | tee -a "$LOG" else echo -e "$output" fi } create_env_variable() { local key="$1" local value="$2" local file="${3:-$ENV_FILE}" local isUpdated="${4:-true}" if [[ "$file" == '--' ]]; then file=$ENV_FILE fi if [[ -z "$value" && "$isUpdated" == true ]]; then if grep -q "^$key=*" "$file" 2>/dev/null; then info_print "$key not updated." $WARN_FLAG return else info_print "$key not set (empty input)." $WARN_FLAG return fi fi if [[ "$isUpdated" == true ]]; then if grep -Eq "^${key}=" "$file" 2>/dev/null; then read -p "$key already set, overwrite? (y/N): " yn case "$yn" in [Yy]*) sed -i "s/^$key=.*/$key=$value/" "$file" info_print "$key updated." $SUCCESS_FLAG ;; *) info_print "$key not changed." $WARN_FLAG ;; esac else echo "$key=$value" >> "$file" info_print "$key set." $SUCCESS_FLAG fi else if grep -Eq "^${key}=" "$file" 2>/dev/null; then sed -i "s/^$key=.*/$key=$value/" "$file" else echo "$key=$value" >> "$file" fi fi } create_raw_line_variable() { local line="$1" local file="$2" if grep -Fxq "$line" "$file" 2>/dev/null; then info_print "'$line' already defined as raw line." $WARN_FLAG else echo "$line" >> "$file" info_print "'$line' added as raw line." $SUCCESS_FLAG fi }