GNU/Linux >> Linux Esercitazione >  >> Linux

Bash + Utilizzo di Printf per stampare in un formato speciale?

Ho appena scritto il seguente script bash per controllare l'accesso al ping sull'elenco delle macchine Linux:

for M in $list
 do
   ping -q -c 1  "$M" >/dev/null 
          if [[ $? -eq 0 ]]
   then
    echo "($C) $MACHINE CONNECTION OK"
   else
    echo "($C) $MACHINE CONNECTION FAIL"
   fi

   let C=$C+1
done

Questo stampa:

 (1) linux643 CONNECTION OK
 (2) linux72 CONNECTION OK
 (3) linux862 CONNECTION OK
 (4) linux12 CONNECTION OK
 (5) linux88 CONNECTION OK
 (6) Unix_machinetru64 CONNECTION OK

Come posso usare printf (o qualsiasi altro comando) nel mio script bash per stampare il seguente formato?

 (1) linux643 ............ CONNECTION OK
 (2) linux72 ............. CONNECTION OK
 (3) linux862 ............ CONNECTION OK
 (4) linux12 ............. CONNECTION OK
 (5) linux88 ............. CONNECTION FAIL
 (6) Unix_machinetru64 ... CONNECTION OK

Risposta accettata:

Utilizzo dell'espansione dei parametri per sostituire gli spazi risultanti da %-s con punti:

#!/bin/bash
list=(localhost google.com nowhere)
C=1
for M in "${list[@]}"
do
    machine_indented=$(printf '%-20s' "$M")
    machine_indented=${machine_indented// /.}

    if ping -q -c 1  "$M" &>/dev/null ;  then
        printf "(%2d) %s CONNECTION OK\n" "$C" "$machine_indented"
    else
        printf "(%2d) %s CONNECTION FAIL\n" "$C" "$machine_indented"
    fi
    ((C=C+1))
done

Linux
  1. Utilizzo di Bash per l'automazione

  2. Bash Converti \xc3\x89 in É?

  3. Bash Beginner Series #9:Utilizzo delle funzioni in Bash

  4. Array in Bash non trovato

  5. Usare i colori con printf

Bash printf - Come stampare una variabile in Bash

Comando Bash printf

Utilizzo del comando Bash printf per la stampa di output formattati

Usando Bash Sort per ordinare i file come un boss

Bash - Come stampare stringhe multilinea (con '\n') usando printf

Visualizzare ciascuna dimensione della sottodirectory in un formato elenco utilizzando un comando di riga in Bash?