GNU/Linux >> Linux Esercitazione >  >> Linux

Bash printf - Come stampare una variabile in Bash

Introduzione

Il bash printf command è uno strumento utilizzato per creare output formattato. È una shell incorporata, simile a printf() funzione in C/C++, Java, PHP e altri linguaggi di programmazione. Il comando consente di stampare testo formattato e variabili in output standard.

Usa printf negli script bash per aumentare l'efficienza e la riutilizzabilità durante la programmazione.

In questo tutorial imparerai a usare il printf comando in Linux per stampare variabili e formattare l'output.

Prerequisiti

  • Una macchina che esegue Linux
  • Accesso a un terminale (Ctrl + Alt + T )

Sintassi bash printf

Il printf comando accetta la seguente sintassi:

printf [-v var] [format specifiers] [arguments]

[-v var]

Il -v facoltativo flag assegna l'output al [var] variabile invece di stamparla in output standard.

[format specifiers]

Gli identificatori di formato sono stringhe che determinano i metodi di formattazione degli identificatori. La sezione seguente include un elenco di specificatori accettati.

[arguments]

Gli argomenti possono essere qualsiasi valore o variabile e [format specifiers] punta a [arguments] . Se sono presenti più argomenti rispetto agli specificatori di formato, la stringa di formato viene riutilizzata finché non interpreta l'ultimo argomento.

Se sono presenti meno specificatori di formato rispetto agli argomenti, i formati numerici vengono impostati su zero (0 ), mentre i formati delle stringhe sono impostati su null (vuoto).

Specificatori printf

La tabella seguente mostra printf comuni identificatori di formato e relative descrizioni:

Specificatore di formato Descrizione
%c Tratta gli argomenti come un singolo carattere.
%d Tratta l'input come un numero decimale (intero) (base 10).
%e Tratta l'input come un numero esponenziale a virgola mobile.
%f Tratta l'input come un numero a virgola mobile.
%i Tratta l'input come un numero intero (base 10).
%o Tratta l'input come un numero ottale (base 8).
%s Tratta l'input come una stringa di caratteri.
%u Tratta l'input come un numero decimale (intero) senza segno.
%x Tratta l'input come un numero esadecimale (base 16).
%% Stampa un segno di percentuale.
%Wd Stampa il W intero X cifre larghe.
%(format)T Emette una stringa data-ora risultante dall'utilizzo di format come stringa di formato per strftime . L'argomento corrispondente può essere il numero di secondi trascorsi da Epoch (1 gennaio 1970, 00:00), -1 (l'ora corrente) o -2 (tempo di avvio della shell). Se non si specifica un argomento, viene utilizzata l'ora corrente come valore predefinito.
\% Stampa un segno di percentuale.
\n Stampa un newline carattere.
\t Stampa una tab carattere.

Alcuni specificatori di formato accettano modificatori di formato che modificano le loro azioni. Inserisci i modificatori tra il % carattere e il carattere che specifica il formato.

I modificatori di formato disponibili sono:

  • <N> . Immettere un numero che specifichi una larghezza minima del campo. Se il testo di output è più corto, viene riempito con spazi. Se il testo è più lungo, il campo si espande.
  • . (punto) . Se utilizzato con un modificatore di larghezza del campo, il campo non si espande per un testo più lungo. Al contrario, il testo viene troncato.
  • - . Allinea a sinistra il testo stampato. L'allineamento predefinito è corretto.
  • 0 . Completa i numeri con zeri anziché spazi.
  • <space> . Riempie un numero positivo con uno spazio e un numero negativo con un meno (- ).
  • + . Stampa tutti i numeri firmati (+ per positivo, - per negativo).
  • ' . Per le conversioni decimali, applica il separatore di raggruppamento delle migliaia alla parte intera dell'output in base all'attuale LC_NUMERIC file.

Esempi di Bash printf

Gli esempi seguenti mostrano casi d'uso comuni e diversi modi di formattare l'output utilizzando printf .

Sebbene il comando possa stampare variabili nel terminale, è più vantaggioso utilizzarlo negli script bash poiché consentono il riutilizzo del codice e facilitano l'automazione.

Separa l'output con un carattere di nuova riga

A differenza di echo , utilizzando printf per stampare una stringa o una variabile senza alcun identificatore di formato restituisce il testo non formattato in una singola riga. Per aggiungere un carattere di nuova riga e separare le voci, specifica il \n identificatore di formato:

Un carattere di nuova riga ora separa l'output stampato.

Stampa variabili multiple

Usa printf per stampare più variabili nell'output standard. Segui i passaggi seguenti:

1. Apri il terminale (Ctrl + Alt + T ) e crea uno script bash utilizzando un editor di testo come vi/vim :

vi script.sh

2. Immettere le seguenti righe:

#!/bin/bash
printf "Enter your name:\n"
read name
printf "Enter your surname:\n"
read surname 
printf 'Welcome: %s\n' "$name $surname"

Il %s nella stringa di formato punta alle variabili definite nelle righe precedenti, mentre \n indica printf per aggiungere un carattere di nuova riga.

3. Salva lo script ed esci da vi inserendo:

:wq

4. Esegui lo script:

bash script.sh

5. Immettere i valori richiesti per le due variabili e verificare il risultato:

Il printf Il comando memorizza l'input nelle due variabili e quindi stampa le variabili nello standard output.

Stampa variabile in una tabella simulata

Aggiungi automaticamente il riempimento dinamico o modifica l'allineamento dell'output variabile utilizzando printf . Segui i passaggi seguenti per stampare una variabile in una tabella simulata:

1. Crea un file di script:

vi table.sh

2. Immettere le seguenti righe e salvare lo script:

#!/bin/bash
var='hello'
printf '|%10s|\n' "$var"

Il %10 assicura che ci siano dieci caratteri all'interno dei simboli pipe, riempiendo l'output della variabile con caratteri di spazi bianchi fino a quella lunghezza. I s tratta la variabile di input come una stringa.

3. Esegui lo script e controlla il risultato:

bash table.sh

Il comando emette la variabile racchiusa nei simboli pipe e la allinea a destra per impostazione predefinita. Per allineare l'output sul lato sinistro, aggiungi il - modificatore dopo il % carattere nella stringa di formato:

#!/bin/bash
var='hello'
printf '|%-10s|\n' "$var"

Aggiungi punti decimali

Usa printf con il %f identificatore di formato per trattare l'input come un numero a virgola mobile e aggiungere la precisione di due cifre decimali. Segui i passaggi seguenti:

1. Crea uno script bash:

vi precision.sh

2. Immettere le seguenti righe e salvare lo script:

#!/bin/bash
printf "Enter a decimal number:\n"
read number
printf "%5.2f\n" "$number"

3. Esegui lo script:

bash precision.sh

L'output stampa la variabile come un numero a virgola mobile arrotondato a due cifre decimali.

Memorizza i dati in una variabile

Usa il -v segnala con printf per assegnare una variabile di shell per memorizzare i dati invece di stamparli nell'output standard.

Segui i passaggi seguenti:

1. Crea uno script bash:

vi variable.sh

2. Immettere le seguenti righe e salvare lo script:

#!/bin/bash
printf -v var 'Welcome'
printf '%s\n' "$var"

3. Esegui lo script:

bash variable.sh

L'output stampa il contenuto della variabile memorizzata.

Convertire numeri esadecimali

Il %d l'identificatore di formato indica printf per trattare l'input come un numero decimale (intero). Usa lo specificatore per creare uno script che converta i numeri esadecimali in decimali.

Segui i passaggi seguenti:

1. Crea uno script bash:

vi convert.sh

2. Immettere le seguenti righe e salvare lo script:

#!/bin/bash
printf 'Enter a hexadecimal number:\n'
read number
printf "%d\n" "$number"

3. Esegui lo script:

bash convert.sh

Lo script converte il numero esadecimale di input in uno decimale.

Converti i numeri decimali in ottali

Usa il %o identificatore di formato per convertire i numeri decimali in numeri ottali. Segui i passaggi seguenti:

1. Crea uno script:

vi octal.sh

2. Immettere le seguenti righe e salvare lo script:

#!/bin/bash
printf "Enter a decimal number:\n"
read number
printf "The octal number of "$number" is %o\n" "$number"

3. Esegui lo script:

bash octal.sh

Lo script converte il valore decimale immesso in uno ottale.

Stampa data

Crea uno script che utilizzi printf per visualizzare la data corrente. Segui i passaggi seguenti:

1. Crea uno script:

vi datetime.sh

2. Immettere le seguenti righe e salvare lo script:

#!/bin/bash
printf 'Today is %(%F)T\n' -1

Il %F tratta l'input come un numero a virgola mobile, mentre -1 indica la data corrente.

3. Esegui lo script per verificare se funziona:

bash datetime.sh

L'output indica la data e l'ora correnti.

Aggiungi virgole a migliaia

Quando hai a che fare con i numeri, usa il ' modificatore per rendere l'output più leggibile aggiungendo virgole per indicare migliaia. Segui i passaggi seguenti:

1. Crea uno script bash:

vi decimals.sh

2. Immettere le seguenti righe:

#!/bin/bash
printf "Enter a number:\n"
read number
printf "%'d\n" $number

3. Esegui lo script:

bash decimals.sh

Dopo aver inserito un numero, lo script utilizza printf per aggiungere automaticamente le virgole al valore di input.

Ottieni il codice ASCII dei caratteri

Crea uno script che utilizzi printf per generare un ASCII di un carattere di input valore. Segui i passaggi seguenti:

1. Crea uno script:

vi character.sh

2. Immettere le seguenti righe e quindi salvare lo script:

#!/bin/bash
printf "Enter a character to get character code:\n"
read character
printf "%d\n" "'$character"

3. Esegui lo script e verifica se funziona:

bash character.sh

Lo script restituisce il valore ASCII del carattere di input.


Linux
  1. Script Bash(I)

  2. Come stampare una variabile con allineamento centrale imbottito?

  3. Come stampare le righe numero 15 e 25 su ogni 50 righe?

  4. Come verificare se Bash può stampare i colori?

  5. Come consentire solo determinati caratteri in una variabile Bash?

Variabile di esportazione Bash

Come aumentare e diminuire la variabile in Bash (counter)

Comando Bash printf

Come impostare la variabile d'ambiente in Bash

Come posso contare il numero di caratteri in una variabile Bash

Come eliminare la variabile di sola lettura in bash?