[mise en forme script] tableau / echo ???

Résolu
hirual Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
hirual Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je prépare un script, qui me permet de checker l'état des disques de mes machines (le script n'en est qu'a c'est début), cependant j'aimerais pouvoir lui donner une mise en forme correct, du style:

DISQUE       SERIAL         SMART        I/O ERROR     AGE     RAID     TEMP 
XXXX XXXXXX XXXX XXX XXXXX XXXXX XXXXX
XXXXX XXXX XXXX XXXXX XXXXX XXXXX XXXXX

donc en gros un tableau, bien formatée avec en haut les intitulée et plus bas, les valeurs retournée par les test effectuer par le script

le problème c'est que dans une variable, je ne parvient pas a stocker plus de un espace et donc en plus de ne pas être propre, sa pose soucis, en effet, par exemples les serial des disques ne comporte pas forcement tous le même nombres de caractères, idem pour d'autre valeurs tel que l'age du disque ou autres

j'ai donc voulu me tester au tableau, mais la je ne parviens pas a grand chose, car quand je veut l'afficher, ce dernier le fait ligne par ligne :/ car il semblerais que les tableau en bash soit limités a 1 seule dimension

j'ai aussi tester les tableau associatif, mais la je m'y perd

declare -A tab
tab[0:1]=A
tab[0:2]=B
tab[0:3]=C
tab[0:4]=D
tab[1:1]=E
tab[2:2]=F
tab[3:3]=G
tab[4:4]=H

echo ${tab[@]}

resultat:

F H E D B C A G

si quelqu'un avait des conseil, ou un lien vers un tuto, me permettant de pouvoir étudier le sujet sa serait cool

Merci

A voir également:

6 réponses

hirual Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
visiblement un petit problème avec la balise <code>
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
pour afficher avec une largeur constante, utiliser printf
$ var="A"
$ printf "%5s\n" $var
A
$ printf "%10s\n" $var
A
$ printf "%-10shello\n" $var
A hello
$ printf "%10shello\n" $var
Ahello
$
0
hirual Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
A ben j'aurais pas penser a printf :/

merci sa fonctionne a première vue:

var="A"
varb="B"
printf "%5s" $var
printf "%10s\n" $varb

# ./test.sh
A B
0
hirual Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
bon faut jouer un peut avec le possitionnement, voila ce que sa donne pour le moment:

#!/bin/sh
clear
printf "%0sDISQUE"
printf "%16sSERIAL"
printf "%5sSMART"
printf "%5sAGE\n"
# Detection des disques
SD=$(ls /dev/sd[a-z]) # test la presence des disques de sda a sdz
SG=$(ls /dev/sg[0-99]) # test la presence des disques de sg0 a sg99

# Lancement des tests pour disques type sdX
for dd in $SD
do
# Recuperation du serial
serial=$(smartctl -a -d ata $dd | egrep 'Serial' | awk '{ print $3 }')
# Compte le nombre de caracteres dans le serial
Tserial=$(echo $serial | wc -c) && (( Tserial = $Tserial -1 ))
# test smart du disque
smart=$(smartctl -a -d ata $dd | egrep 'Logged')
if [ "$smart" = "No Errors Logged" ]
then
smart_result="OK"
else
smart_result="FAILED"
fi
# Nombre d'heure de vie du disque
age=$(smartctl -a -d ata $dd | egrep 'Power_On_Hours' | awk '{ print $10 }')
# Affiche des resultats pour le disque
printf "%0s" $dd
printf "%20s" $serial
printf "%10s" $smart_result
printf "%8s\n" $age
done



DISQUE                SERIAL     SMART     AGE
/dev/sda            Z2A7QYDJ        OK   22070
/dev/sdb      TV650BXFG1BS3R        OK     447
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

On peut groupir aussi ;-))

$ printf "%s%20s%10s%8s\n" "Disque" "Serial" "Smart" "Age"
Disque Serial Smart Age
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hirual Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
merci, j'avais tester, mais pas réussi, sa fait moins brouillon comme sa
0
hirual Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
ce problème étant résolut, je clôture, merci pour votre aide ;)
0