[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 -
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:
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
resultat:
si quelqu'un avait des conseil, ou un lien vers un tuto, me permettant de pouvoir étudier le sujet sa serait cool
Merci
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:
- [mise en forme script] tableau / echo ???
- Mise en forme tableau word - Guide
- Mise en forme conditionnelle excel - Guide
- Mise en forme tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Script vidéo youtube - Guide
6 réponses
hello
pour afficher avec une largeur constante, utiliser printf
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
$
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
merci sa fonctionne a première vue:
var="A"
varb="B"
printf "%5s" $var
printf "%10s\n" $varb
# ./test.sh
A B
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question