L'ajout de Compteur en script shell
J'ai ci-dessous de code dans mon script shell qui va continuer à dormir si il ne trouve aucun fichier. Et il dort pendant une demi-heure, mais actuellement je n'ai pas de compteur seulement exécuter le code ci-dessous 20 fois, puis quittez le programme si les fichiers sont toujours pas là (les moyens de ne pas faire n'importe quoi au bout de 20 contrôles et quitter le script intégral).
Quelle est la meilleure façon de faire de ce problème? De sorte que je suis aussi conscient qu'en regardant les e-mails qu'il a essayé 20 fois.
Espère que je suis assez clair.
while true; do
if /home/hadoop/latest/bin/hadoop fs -ls /apps/hdtech/bds/quality-rt/dt=$DATE_YEST_FORMAT2 then
echo "Files Present" | mailx -s "File Present" -r admin@host.com admin@host.com
break
else
echo "Sleeping for half an hour" | mailx -s "Time to Sleep Now" -r admin@host.com admin@host.com
sleep 1800
fi
done
Vous devez vous connecter pour publier un commentaire.
Voici comment vous pourriez mettre en œuvre un compteur:
Quelques Explications:
counter=$((counter+1))
- c'est comment vous pouvez incrémenter un compteur. Le$
pourcounter
est en option à l'intérieur de la double parenthèses dans ce cas.elif [[ "$counter" -gt 20 ]]; then
- ce vérifie si$counter
n'est pas plus grand que20
. Si oui, il génère le message approprié et les pauses de votre boucle while.break
danselif
est il possible que je peux quitter le script? Pourquoi je demande, c'est parce qu'aprèsdone
ligne que j'ai beaucoup plus de code à exécuter si elle a été exécutée uniquement lorsque les fichiers ont été présents, mais après l'ajout de cette de la contre, je ne veux pas faire les code ainsi après avoir vérifié 20 fois si les fichiers sont toujours pas là.exit 0
(si la résiliation comme prévu) ouexit 1
(si la résiliation et que vous souhaitez indiquer une erreur s'est passé)counter=$((counter+1))
cette ligne comme$
inattendu. Pourquoi est-il si? Je suis en cours d'exécution du script ci-dessus commesh -x test1.sh
counter=$(($counter+1))
?Essayez ceci:
Explication
break
- si des fichiers sont présents, il va se casser et laisser le script pour traiter les fichiers.[[ "$counter" -gt 20 ]]
- si la variable compteur est supérieur à 20, le script se terminera.let counter++
- incrémente le compteur de 1 à chaque passage.let counter++
syntaxe de l'ancien avec un tas de dollars 🙂