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 24/10/2010, à 09:58

paliocer

[RESOLU] Boucle infinie

Salut les amis
alors voilà, j'essaie de faire un petit script bash pour afficher la date et l'état de la batterie.
là où ça pose problème, c'est que je veux que les deux lignes soient encadrées par ">>>>> " et " <<<<<" et surtout que ces "flèches" soient alignés (sachant qu'il n'y a pas le même nombre de caractères sur les deux lignes.
j'essaie donc de rajouter des espaces à la deuxième ligne pour ça mais j'ai une boucle infinie.
voici mon script :

#!/bin/bash

maj=`date | colrm 2 | tr [a-z] [A-Z]`                                # on détermine la première lettre de la date en majuscule
date=`date +%A" "%d" "%B" "%Y" "%T | colrm 1 1`      # ligne de date/heure sans la première lettre
nbDate=`echo ${maj}${date} | wc -c`                           # nombre de caractères sur la ligne date/heure
nbBat=`acpi | wc -c`                                                     # nombre de caractères sur la ligne état de la batterie

echo '>>>>>' ${maj}${date} '<<<<<'                              # affichage de la ligne date/heure avec la première lettre en majuscule
echo '>>>>>' `acpi`                                                       # affichage du début de la ligne acpi

while test ["${nbBat}" != "${nbDate}"]
do
        echo -n ' '                                                              # on rajoute des espaces pour avoir le même nombre de caractères que la ligne date/heure
        nbBat=`expr ${nbBat} + 1`                                    # on incrémente nbBat pour ne pas avoir de boucle infinie (mais c'est le cas :p)
done;

echo -n ' <<<<<'                                                             # fin de la ligne acpi

exit 0

# je considère que la ligne date/heure est toujours plus longue que la ligne acpi parce que... c'est le cas !

c'est peut-être une erreur bête, mais je suis dessus depuis (trop) longtemps...
je suis un peu débutant en bash (surtout pour les boucles), alors me gueulez pas trop fort dessus svp big_smile

Dernière modification par paliocer (Le 24/10/2010, à 11:08)

Hors ligne

#2 Le 24/10/2010, à 10:51

chcamier

Re : [RESOLU] Boucle infinie

Pour ceci, tu peux utiliser printf(1) à la place de echo. Cette commande permet de formater les sorties.

Elle s'utilise comme suit:
printf format arg1 .... arg2

Exemple:
$ AN=5
$ AS="ABCDEF"
$ BN=103
$ BS="ABCDEFGHIJ"
$ printf "%-10s %4d\n" $AN $AS
ABCDEF        5
$ printf "%-10s %4d\n" $BN $BS
ABCDEFGHIJ  103

Dans la chaîne de format, les séquences du type '%..x' indique, dans leur ordre d'apparition, le format dans lequel on désire afficher les arguments. La première séquence (%-10s) indique que l'on affiche une chaîne de caractères (string) sur 10 alignés à gauche (signe moins -)

Dernière modification par chcamier (Le 24/10/2010, à 10:52)

Hors ligne

#3 Le 24/10/2010, à 11:07

paliocer

Re : [RESOLU] Boucle infinie

ça marche !
merci !

(maintenant je vais essayer de centrer la deuxième ligne, on se revoit dans quelques heures smile)

Hors ligne

#4 Le 24/10/2010, à 15:39

ehmicky

Re : [RESOLU] Boucle infinie

Essaye donc ça (ligne non centrée) :

MaDate="$(date "+%A %d %B %Y %T" | sed 's/./\u&/')" 
printf ">>>>> %s <<<<<\n>>>>> %-*s<<<<<\n" "$MaDate" $(wc -c <<<"$MaDate") "$(acpi)"

smile
Output :

>>>>> Sunday 24 October 2010 16:39:41 <<<<<
>>>>> Battery 0: Full, 100%           <<<<<

Dernière modification par ehmicky (Le 24/10/2010, à 19:38)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne