2 votes

Bash + imprimez une ligne toutes les 10 minutes en bash

Je veux imprimer par echo le texte suivant "encore en cours, attendez 10 minutes de plus" toutes les 10 minutes

Veuillez conseiller quelle condition doit être ajoutée avant la commande echo afin d'afficher cette ligne toutes les 10 minutes?

Remarque - le compteur augmente de un à chaque cycle (1 seconde), je ne veux pas ajouter de délai supplémentaire (commande sleep) à ce script !!!!!

 Jusqu'à ce que   [    ]
 do
 Counter=1

 sleep 1

  let counter=$counter+1

  [ .... ] &&  echo "encore en cours, attendez 10 minutes de plus ...."

 done

7voto

faker Points 17246

Utiliser l'opérateur modulo (syntaxe spécifique à bash) :

if [ $(($counter % 600)) -eq 0 ] ; then
  echo " encore en cours, attendre 10 minutes de plus .."
fi

Ou plus portable :

if [ `expr $counter % 600` -eq 0 ] ; then
  echo " encore en cours, attendre 10 minutes de plus .."
fi

1 votes

Aieeee! Devrais y avoir réfléchi.... +1 pour vous, monsieur!

1voto

Janne Pikkarainen Points 31244

Ajoutez un autre compteur, et si celui-ci atteint 600, appelez echo et réinitialisez le compteur. Répétez au besoin.

Donc quelque chose comme ceci devrait fonctionner:

let echocounter=$echocounter+1
if [ $echocounter == 600 ]; then echo "encore en cours, attendez 10 minutes ..."; $echocounter=0; fi

0 votes

Il suffit de supprimer le $ avant echocounter ( $echocounter=0; fi n'est pas illégal en bash)

1 votes

+1 c'est ce que j'aurais suggéré. Prenez une boucle jusqu'à ce que le compteur soit à 600, puis échoez la chose et réinitialisez le compteur à 0. Cependant, grâce à la réponse de faker, je réalise que le modulo est bien plus élégant et efficace

1voto

dberesford Points 61

Ce que vous voulez, c'est quelque chose comme ceci :

#10 minutes a partir de maintenant
Increment_Timestamp=$(( $(date +%s) + 600 ))

while [  ...  ]
do
...
...
    # Quand maintenant est il y a 10 minutes, affiche le message.
    if [ $(date +%s) -lt "${Increment_Timestamp}" ]
    then
        ${Increment_Timestamp}=$(( $(date +%s) + 600 ))
        echo "Message"
    fi
done

0voto

Lucas Kauffman Points 16740

J'ai ajouté un peu de logique pour vérifier l'heure :

BOOL=true
MINUTES=$(date +"%M")
MINUTES=$(echo $MINUTES | sed 's/^0*//')

if $BOOL ; then
        BOOL=false

        if [ $MINUTES -le "49" ];then
                MINUTES10=$(($MINUTES+10))
        else
                MINUTES10=$(($MINUTES+50))
        fi
fi

if [ $MINUTES10 -eq $MINUTES ];then
        echo "message"
        BOOL=true
fi

0 votes

Bonjour - Je ne veux pas ajouter un autre retard à mon script ( ne veux pas ajouter un autre sleep )

0 votes

La prochaine fois, veuillez fournir un peu plus d'informations sur ce que vous voulez, votre question n'est pas très claire. Donc vous voulez faire le processus X et toutes les dix minutes vous voulez afficher le message si le script n'est pas terminé?

0 votes

Oui je veux créer une condition - voir mon commentaire dans ma question

0voto

ptman Points 26336

Vous voulez probablement le programme sleepenh, qui permet de "dormir de manière précise". Il y a aussi un article de blog sur la façon dont il a été utilisé pour résoudre un problème qui ne nécessitait pas de trop dormir

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X