diff --git a/setup/homelapGitSetup.sh b/setup/homelapGitSetup.sh index ec2585f..d8d7603 100755 --- a/setup/homelapGitSetup.sh +++ b/setup/homelapGitSetup.sh @@ -64,8 +64,8 @@ set_cronjob() { # Validate user is not root if [[ $EUID -eq 0 ]]; then - echo "${RED}Error: Do not run this as root! Use your regular user.${RESET}" >&2 - return 1 + echo "${RED}Error: Do not run this as root! Use your regular user.${RESET}" >&2 + return 1 fi # Initialize variables @@ -81,45 +81,55 @@ set_cronjob() { PS3="$(echo -e "${BOLD}Choose schedule type [1-4]: ${RESET}")" echo "${BOLD}Available presets:${RESET}" select PRESET in "Daily" "Weekly" "Monthly" "Custom"; do - case $REPLY in - 1) SCHEDULE="0 0 * * *"; break ;; - 2) SCHEDULE="0 0 * * 0"; break ;; - 3) SCHEDULE="0 0 1 * *"; break ;; - 4) break ;; - *) echo "${RED}Invalid selection!${RESET}" ;; - esac + case $REPLY in + 1) + SCHEDULE="0 0 * * *" + break + ;; + 2) + SCHEDULE="0 0 * * 0" + break + ;; + 3) + SCHEDULE="0 0 1 * *" + break + ;; + 4) break ;; + *) echo "${RED}Invalid selection!${RESET}" ;; + esac done # 2. Custom schedule setup if [[ "$PRESET" == "Custom" ]]; then - echo "${YELLOW}Enter schedule components (use '*' for any)${RESET}" - read -p "Minute (0-59): " MIN - read -p "Hour (0-23): " HOUR - read -p "Day of month (1-31): " DOM - read -p "Month (1-12): " MONTH - read -p "Day of week (0-6, 0=Sunday): " DOW - SCHEDULE="$MIN $HOUR $DOM $MONTH $DOW" + echo "${YELLOW}Enter schedule components (use '*' for any)${RESET}" + read -p "Minute (0-59): " MIN + read -p "Hour (0-23): " HOUR + read -p "Day of month (1-31): " DOM + read -p "Month (1-12): " MONTH + read -p "Day of week (0-6, 0=Sunday): " DOW + SCHEDULE="$MIN $HOUR $DOM $MONTH $DOW" fi # Validate schedule format - if ! [[ "$SCHEDULE" =~ ^([0-9*/, -]+ ){4}[0-9*/, -]+$ ]]; then - echo "${RED}Invalid cron schedule format!${RESET}" - return 1 + local cron_regex='^([0-9*/, -]+[[:space:]]){4}[0-9*/, -]+$' + if ! [[ "$SCHEDULE" =~ $cron_regex ]]; then + echo "${RED}Invalid cron schedule format!${RESET}" + return 1 fi # 3. Script path selection while true; do - read -e -p "$(echo -e "${BOLD}Path to script: ${RESET}")" SCRIPT_PATH - if [[ ! -f "$SCRIPT_PATH" ]]; then - echo "${RED}Script does not exist!${RESET}" - continue - fi - if [[ ! -x "$SCRIPT_PATH" ]]; then - read -p "$(echo -e "${YELLOW}Script is not executable. Make it executable? [y/N]: ${RESET}")" -n 1 -r - echo - [[ $REPLY =~ ^[Yy]$ ]] && chmod +x "$SCRIPT_PATH" - fi - break + read -e -p "$(echo -e "${BOLD}Path to script: ${RESET}")" SCRIPT_PATH + if [[ ! -f "$SCRIPT_PATH" ]]; then + echo "${RED}Script does not exist!${RESET}" + continue + fi + if [[ ! -x "$SCRIPT_PATH" ]]; then + read -p "$(echo -e "${YELLOW}Script is not executable. Make it executable? [y/N]: ${RESET}")" -n 1 -r + echo + [[ $REPLY =~ ^[Yy]$ ]] && chmod +x "$SCRIPT_PATH" + fi + break done # 4. Logging options @@ -128,15 +138,26 @@ set_cronjob() { PS3="$(echo -e "${BOLD}Select logging option [1-4]: ${RESET}")" echo "${BOLD}Logging options:${RESET}" select LOGGING in "Full logging" "Errors only" "No logging" "Custom path"; do - case $REPLY in - 1) LOGGING=">> $LOG_DIR/${SCRIPT_PATH##*/}.log 2>&1"; break ;; - 2) LOGGING="2>> $LOG_DIR/${SCRIPT_PATH##*/}.error.log"; break ;; - 3) LOGGING="> /dev/null 2>&1"; break ;; - 4) read -e -p "Enter full log path: " LOGGING_PATH - LOGGING=">> $LOGGING_PATH 2>&1" - break ;; - *) echo "${RED}Invalid selection!${RESET}" ;; - esac + case $REPLY in + 1) + LOGGING=">> $LOG_DIR/${SCRIPT_PATH##*/}.log 2>&1" + break + ;; + 2) + LOGGING="2>> $LOG_DIR/${SCRIPT_PATH##*/}.error.log" + break + ;; + 3) + LOGGING="> /dev/null 2>&1" + break + ;; + 4) + read -e -p "Enter full log path: " LOGGING_PATH + LOGGING=">> $LOGGING_PATH 2>&1" + break + ;; + *) echo "${RED}Invalid selection!${RESET}" ;; + esac done # 5. Add comment @@ -152,21 +173,22 @@ set_cronjob() { [[ $REPLY =~ ^[Yy]$ ]] || return 0 # Add to crontab - (crontab -l 2>/dev/null; - echo -e "\n${COMMENT}\n${SCHEDULE} ${SCRIPT_PATH} ${LOGGING}") | crontab - + ( + crontab -l 2>/dev/null + echo -e "\n${COMMENT}\n${SCHEDULE} ${SCRIPT_PATH} ${LOGGING}" + ) | crontab - # Verify if [[ $? -eq 0 ]]; then - echo "${GREEN}${BOLD}Cronjob added successfully!${RESET}" - echo "${YELLOW}Current cronjobs:${RESET}" - crontab -l + echo "${GREEN}${BOLD}Cronjob added successfully!${RESET}" + echo "${YELLOW}Current cronjobs:${RESET}" + crontab -l else - echo "${RED}Failed to add cronjob!${RESET}" - return 1 + echo "${RED}Failed to add cronjob!${RESET}" + return 1 fi } - if ! command_exists git; then return 1 echo_error "You don't have git installed!"