Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/04/2022, à 19:20

Tawal

[Bash] Tester la validité d'une expression temporelle cron.

Hello,

En fouillant dans les outils fournis avec cron, je suis surpris de ne pas voir quelque chose pour vérifier une expression cron.
Du moins si, en mode interactif, crontab se charge de vérifier les tables après l'édition.
Donc cron embarque bien une fonction de vérification, mais elle n'est pas accessible à l'utilisateur sad
J'ai donc fait une fonction qui teste la validité de l'expression temporelle :

_test_cron_exp ()
{
    declare -a cronExp
    read -ra cronExp <<<  "$*" 
    if [[ ${cronExp[*]^^} =~ ^@(REBOOT|YEARLY|ANNUALY|MONTHLY|WEEKLY|DAILY|MIDNIGHT|HOURLY)$ ]]
    then
        return 0
    else
        if [[ ${cronExp[0]} =~ ^\*$|^\*\/[1-5]?[0-9]$|^([1-5]?[0-9](-[1-5]?[0-9])*(\/[1-5]?[0-9])?,)*([1-5]?[0-9](-[1-5]?[0-9])*(\/[1-5]?[0-9])?)$ ]]
        then
            if [[ ${cronExp[1]} =~ ^\*$|^\*\/(1?[0-9]|2[0-3])$|^((1?[0-9]|2[0-3])(-(1?[0-9]|2[0-3]))*(\/(1?[0-9]|2[0-3]))?,)*((1?[0-9]|2[0-3])(-(1?[0-9]|2[0-3]))*(\/(1?[0-9]|2[0-3]))?)$ ]]
            then
                if [[ ${cronExp[2]} =~ ^\*$|^\*\/([^0][12]?[0-9]|3[01])$|^(([^0][12]?[0-9]|3[01])(-([^0][12]?[0-9]|3[01]))*(\/([^0][12]?[0-9]|3[01]))?,)*(([^0][12]?[0-9]|3[01])(-([^0][12]?[0-9]|3[01]))*(\/([^0][12]?[0-9]|3[01]))?)$ ]]
                then
                    if [[ ${cronExp[3]^^} =~ ^\*$|^\*\/([1-9]|1[0-2])$|^(([1-9]|1[0-2])(-([1-9]|1[0-2]))*(\/([1-9]|1[0-2]))?,)*(([1-9]|1[0-2])(-([1-9]|1[0-2]))*(\/([1-9]|1[0-2]))?)$|^(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)$ ]]
                    then
                        if [[ ${cronExp[4]^^} =~ ^\*$|^\*\/[0-7]$|^([0-7](-[0-7])*(\/[0-7])?,)*([0-7](-[0-7])*(\/[0-7])?)$|^(MON|TUE|WEN|THU|FRI|SAT|SUN)$ ]]
                        then
                            return 0
                        fi
                    fi
                fi
            fi
        fi
    fi
    return 1
}

Bon, les regex sont monstrueuses, et c'est là que je me demande si il n'y aurait pas plus simple ?

Edit : simplification de l'attribution du tableau cronExp
Edit : non, finalement, retour en arrière tongue

Dernière modification par Tawal (Le 10/04/2022, à 19:30)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#2 Le 10/04/2022, à 20:19

Vobul

Re : [Bash] Tester la validité d'une expression temporelle cron.

Alors avec "crontab", binaire généré par https://github.com/cronie-crond/cronie t'as le flag -T qui permet de check la syntax d'un fichier cron.


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#3 Le 10/04/2022, à 21:27

Tawal

Re : [Bash] Tester la validité d'une expression temporelle cron.

Je n'aime pas trop les logiciels hors dépôt.
Il est en expérimental chez Debian, c'est de bonne augure ...
Mais quand même.


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne