Pages : 1
#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
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 )
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)"
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