#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
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
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