fixed regex

This commit is contained in:
pika 2025-04-10 20:42:31 +02:00
parent a3cf9d5c10
commit d1f135c7b6

View file

@ -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!"