Question shell que signifie \! (cron cerbot)

Bonjour à tous,

en voulant étudier la mise en place d’une crontab pour automatiser le renouvellement de mon certificat Let’s Encrypt je suis tombé sur une crontab existante qui exécute la commande suivante

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e ‘sleep int(rand(3600))’ && certbot -q renew

Bon la plannification de la crontab ça va…
La commande test qui valide la présence et les droits sur /usr/bin/certbot …aussi…
le -d qui valide la présence du dossier /run/systemd/system …je suis toujours là…
La commande perl qui appelle la fonction sleep avec un argument entier de la valeur 3600 …je comprends toujours…
Enfin l’appel final de certbot qui envoi la requête de renouvellement …jusque là pas de problème.

Cependant le petit \! tout minuscule entre -a et -d me pose énormément de problème d’interprétation.

La lecture attentive du man de la commande test ne m’a rien apprit et après avoir googlisé comme un fou la lecture (difficile) du man bash ne m’a rien apprit de pertinent non plus.

Sauriez vous m’expliquer ce que signifie ce petit \! à cet endroit là ?

Merci pour votre aide

salut
http://www.tuteurs.ens.fr/unix/shell/test.html

-a c’est ET il faut les deux conditions

! c’est inverse pour -d (directory) : vérifie l’existence d’un répertoire ; ça voudrait dire " qu’il nexiste pas le répertoire /run/systemd/system

ceci dit exprimer en bon français la ligne de code…

je dirai que ce n’est pas la valeur 3600 mais un nombre choisit aléatoirement ( random)

1 J'aime

Ha ha merci Grandtoubab

Je n’avais pas pensé REGEX !

Pour le random je m’etais peut-être mal exprimé mais c’est ce que j’avais compris.

Encore merci pour ta réponse à un Newbit

c’est pas une regex (grandtoubab n’en fait d’ailleurs pas mention), c’est simplement la syntaxe du shell.

Bonjour,

Merci pour cette précision importante Watael

Grandtoubab l’article que tu as mis en ligne est passionnant et éclaire carrément ma lanterne.
Merci beaucoup.