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

Résolu
hirual Messages postés 10 Statut Membre -  
hirual Messages postés 10 Statut Membre -
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

  1. hirual Messages postés 10 Statut Membre
     
    visiblement un petit problème avec la balise <code>
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  3. hirual Messages postés 10 Statut Membre
     
    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
  4. hirual Messages postés 10 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      On peut groupir aussi ;-))

      $ printf "%s%20s%10s%8s\n" "Disque" "Serial" "Smart" "Age"
      Disque Serial Smart Age
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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