[mise en forme script] tableau / echo ??? [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014
-
Messages postés
10
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014
-
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

6 réponses

Messages postés
10
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014

visiblement un petit problème avec la balise <code>
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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
$
Messages postés
10
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014

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
Messages postés
10
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014

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
Messages postés
35703
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 octobre 2020
5 576
Salut,

On peut groupir aussi ;-))

$ printf "%s%20s%10s%8s\n" "Disque" "Serial" "Smart" "Age"
Disque Serial Smart Age
Messages postés
10
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014

merci, j'avais tester, mais pas réussi, sa fait moins brouillon comme sa
Messages postés
10
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014

ce problème étant résolut, je clôture, merci pour votre aide ;)