GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Perintah Bash printf untuk Mencetak Output Terformat

Cara paling sederhana untuk mencetak di baris perintah Linux adalah dengan menggunakan perintah echo.

echo "Value of var is $var"

Namun, perintah echo tidak akan cukup ketika Anda perlu mencetak output yang diformat.

Di sinilah perintah printf membantu Anda. Perintah bash printf beroperasi seperti perintah printf dalam bahasa pemrograman C/C++.

printf "My brother %s is %d years old.\n" Prakash 21

Bisakah Anda menebak hasilnya?

Argumen pertama %s mengharapkan string, %d mengharapkan bilangan bulat desimal, seperti C/C++. Jangan khawatir jika Anda tidak terbiasa dengan C/C++.

Anda tidak perlu mempelajarinya hanya untuk menggunakan perintah printf di skrip Bash Anda. Mari saya tunjukkan beberapa contoh perintah Bash printf.

Menggunakan perintah Bash printf

Mari kita mulai dengan sintaksnya terlebih dahulu.

printf format [arguments]

Di sini, format adalah string yang menentukan bagaimana nilai selanjutnya akan ditampilkan.

Pada contoh printf "My brother %s is %d years old.\n" Prakash 21 , seluruh "Saudaraku %s berumur %d tahun.\n" adalah format dan diikuti oleh argumen Prakash dan 21 . Argumen digunakan untuk mengganti penentu format (%s, %d dll) yang akan saya jelaskan nanti di artikel ini.

Dalam bentuknya yang paling sederhana, printf dapat digunakan sebagai perintah echo untuk menampilkan string.

printf "Hello World\n"

Perhatikan karakter baris baru \n pada akhirnya? Perbedaan antara perintah echo dan printf adalah bahwa echo secara otomatis menambahkan karakter baris baru di akhir tetapi untuk printf, Anda harus menambahkannya secara eksplisit.

Perhatikan secara khusus jenis dan jumlah argumen

Ingatlah bahwa string format mencoba diterapkan ke semua argumen. Inilah sebabnya mengapa Anda harus memberi perhatian khusus padanya.

[email protected]:~$ printf "Hello, %s! \n" Abhishek Prakash
Hello, Abhishek! 
Hello, Prakash!

Demikian pula, Anda juga harus memperhatikan jenis penentu format yang diharapkan dalam string format.

Seperti yang Anda lihat pada contoh di atas, jika tidak menemukan argumen yang diinginkan, ini akan menampilkan nilai default yaitu null untuk string dan 0 untuk integer.

printf "Hi %s, your room number is %d. \n" Abhishek Prakash 131
bash: printf: Prakash: invalid number
Hi Abhishek, your room number is 0. 
Hi 131, your room number is 0.

Di sini, dibutuhkan Abhishek Prakash sebagai kumpulan argumen pertama dan 131 sebagai kumpulan argumen kedua.

Ketika menemukan string (Prakash) dan bukan integer, ia mengeluh tetapi terus menampilkan output dengan argumen kedua pada nilai defaultnya 0.

Demikian pula, ia melihat 131 sebagai string dalam kumpulan argumen kedua dan karena argumen kedua tidak ada, defaultnya adalah 0.

Format spesifikasi karakter

Ada beberapa penentu format yang tersedia bagi Anda untuk menampilkan output dalam format yang diinginkan. Berikut adalah beberapa yang paling umum:

Karakter Penggunaan
%s Tali
%c Karakter tunggal
%d Bilangan bulat
%o Bilangan oktal
%x Bilangan bulat heksadesimal
%f Titik mengambang
%b String dengan karakter escape backslash
%% Tanda persen

Sekarang setelah Anda terbiasa dengan penentu format, mari kita lihat beberapa contoh lagi yang menunjukkan cara kerjanya.

Contoh perintah bash printf

Saya rasa Anda tidak memerlukan penjelasan mendetail untuk sebagian besar contoh ini karena sudah cukup jelas.

[email protected]:~$ printf "The octal value of %d is %o\n" 30 30
The octal value of 30 is 36

Mari kita lihat penggunaan %b specifier untuk menginterpretasikan karakter backslash yang lolos dengan benar.

[email protected]:~$ printf "String with backslash: %s\n" "Hello\nWorld!"
String with backslash: Hello\nWorld!

Anda melihat %s , tidak ada bedanya. Tapi dengan %b karakter pelarian baris baru akan ditafsirkan dengan benar:

[email protected]:~$ printf "String with backslash: %b\n" "Hello\nWorld!"
String with backslash: Hello
World!

Saat Anda menggunakan %c , itu hanya membaca karakter pada satu waktu.

[email protected]:~$ printf "Character: %c\n" a
Character: a
[email protected]:~$ printf "Character: %c\n" a b c
Character: a
Character: b
Character: c
[email protected]:~$ printf "Character: %c\n" abc
Character: a

Menggunakan pengubah untuk menampilkan output printf dalam gaya tertentu

Terdapat modifier untuk mengubah tampilan output sesuai keinginan Anda.

# pengubah untuk bilangan oktal dan heksadesimal

Sebelumnya Anda melihat penggunaan %o untuk mengubah desimal ke oktal. Namun, tidak begitu jelas apakah itu bilangan oktal. Anda dapat menggunakan # pengubah untuk menampilkan bilangan oktal dan heksadesimal dalam format yang tepat.

[email protected]:~$ printf "%d is %#o in octal and %#x in hexadecimal\n" 30 30 30
30 is 036 in octal and 0x1e in hexadecimal

Pengubah spasi untuk bilangan bulat positif

Anda dapat menggunakan spasi di antara % dan d di %d untuk menampilkan bilangan bulat positif dengan spasi terdepan. Ini membantu ketika Anda memiliki kolom angka positif dan negatif. Lihat mana yang terlihat lebih 'cantik':

[email protected]:~$ printf "%d \n%d \n%d \n" 10 -10 10
10 
-10 
10 
[email protected]:~$ printf "% d \n%d \n% d \n" 10 -10 10
 10 
-10 
 10 

Pengubah lebar

Pengubah lebar adalah bilangan bulat yang menentukan lebar bidang minimum argumen.

Secara default, ini rata kanan:

[email protected]:~$ printf "%10s| %5d\n" Age 23
       Age|    23

Anda dapat membuatnya rata kiri dengan menambahkan - tandai ke sana:

[email protected]:~$ printf "%-10s| %-5d\n" Age 23
Age       | 23

Pengubah presisi

Anda dapat menggunakan pengubah presisi (.) dot untuk menentukan jumlah digit minimum yang akan ditampilkan dengan %d , %u , %o , %x . Itu menambahkan nol padding di sebelah kiri nilai.

[email protected]:~$ printf "Roll Number: %.5d\n" 23
Roll Number: 00023

Jika Anda menggunakan pengubah presisi dengan string, itu menentukan panjang maksimum string. Jika string lebih panjang, string akan terpotong di tampilan.

[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi

Anda dapat menggabungkan pengubah lebar dan presisi:

[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi
[email protected]:~$ printf "Name: %10.4s\n" Abhishek
Name:       Abhi

Contoh Bonus:Menampilkan output dalam format tabel dengan printf

Mari kita manfaatkan apa yang telah Anda pelajari tentang perintah printf dengan contoh yang sedikit lebih rumit. Ini akan menunjukkan potensi sebenarnya dari perintah printf dalam skrip bash.

Mari kita gunakan perintah printf untuk mencetak tabel berikut menggunakan bash:

Nama ID Usia Nilai
Sherlock Holmes 0000122 23 A
James Bond 0000007 27 B
Hercules Poirot 0006811 59 G
Jane Marple 1234567 71 C

Inilah skrip Shell yang saya tulis untuk tugas ini. Skrip Anda mungkin berbeda:

#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %c\n"
TableWidth=37

printf "%-15s| %-7s| %.3s| %s\n" Name ID Age Grades
printf "%.${TableWidth}s\n" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C

Sekarang jika saya menjalankan skrip bash shell ini, inilah yang dicetaknya:

Bukankah menyenangkan menggunakan perintah bash printf untuk mencetak keluaran yang diformat dengan indah untuk skrip Anda?

Saya harap Anda menyukai tutorial terperinci ini tentang perintah printf di Linux. Jika Anda memiliki pertanyaan atau saran, beri tahu saya. Dan jangan lupa untuk menjadi anggota Buku Pegangan Linux untuk pembelajaran Linux yang lebih informatif.


Linux
  1. 7 trik praktis untuk menggunakan perintah wget Linux

  2. Menggunakan Bash untuk otomatisasi

  3. Menggunakan Perintah Tidur Linux di Skrip Bash

  1. Menggunakan Perintah Nama Dasar Linux di Skrip Bash

  2. Contoh penggunaan perintah tcpdump untuk pemecahan masalah jaringan

  3. Skrip Bash:Menggunakan perintah skrip dari skrip bash untuk mencatat sesi

  1. Bagaimana cara menulis integer ke file biner menggunakan Bash?

  2. Bash mengabaikan kesalahan untuk perintah tertentu

  3. menggunakan acak untuk menghasilkan string acak di bash