GNU/Linux >> Znalost Linux >  >> Linux

Bash + Použití Printf za účelem tisku ve speciálním formátu?

Právě jsem napsal následující bash skript pro kontrolu přístupu ping na seznam počítačů se systémem 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

Toto vytiskne:

 (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

Jak mohu použít printf (nebo jakýkoli jiný příkaz) v mém bash skriptu, aby bylo možné vytisknout následující formát?

 (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

Přijatá odpověď:

Použití rozšíření parametrů k nahrazení mezer vyplývajících z %-s po tečkách:

#!/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. Pole v Bash nenalezeno

  2. Použití výstupu předchozích příkazů v bash

  3. pomocí náhodného vygenerování náhodného řetězce v bash

  1. Použití Bash pro automatizaci

  2. Použití Linux Sleep Command ve skriptech Bash

  3. Bash - Jak tisknout víceřádkové řetězce (s '\n') pomocí printf

  1. Bash Beginner Series #9:Použití funkcí v Bash

  2. Použití případových prohlášení v Bash

  3. Rozdělit výstup příkazu podle sloupců pomocí Bash?