Belajar Bash itu sangat bermanfaat. Jangan terpancing dengan cibiran orang pada Bash. jadi jika suatu ketika Anda berkonsultasi perihal Bash dan disarankan untuk beralih menggunakan "the real programming language", acuhkan saja. Setelah berpuluh tahun, Bash telah berkembang dan sangat layak guna membuat skrip yang tidak membutuhkan algoritma rumit.
Dalam artikel ini saya akan menulis tentang kemampuan Bash dalam mengolah string. Kata string ini agak susah dicari padanan kata bahasa Indonesianya, jadi selanjutnya akan saya tulis sebagai string saja. Kata string sendiri dapat diartikan sebagai urutan karakter. Misal "Angka", "12247" dan "Al4y 1337" adalah string.
Pastinya pernah ketika Anda membuat skrip Bash banyak menggunakan bantuan perkakas di luar Bash, misal sed
, awk
, basename
, dirname
, tr
dan lainnya. Hal ini dikarenakan kemampuan Bash yang terbatas. Dari fenomena ini jugalah Bash mendapat gelar sebagai glue, lem yang menghubungkan banyak perkakas untuk bekerjasama menghasilkan hasil tertentu. Namun seperti telah disinggung di muka, Bash kini telah mendapat penambahan fitur yang bisa menekan penggunaan external utilities.
Nah, berikut di bawah akan saya uraikan contoh kemampuan Bash dalam mengolah string secara mandiri tanpa menggunakan perkakas semacam sed
, awk
, basename
atau dirname
.
Enjoy.
Mengubah besar-kecilnya huruf
Apa yang akan Anda lakukan jika perlu mengubah string yang tadinya berhuruf kecil menjadi berupa huruf besar? Saya yakin yang awal terlintas di pikiran adalah menggunakan bantuan sed
, awk
atau tr
. Sekarang Anda tidak perlu menggunakan ketiganya, karena Bash telah memiliki fungsi built-in untuk ini.
Misal ada sebuah variable yang akan kita gunakan pada seluruh contoh dalam artikel ini .
anu='ini adalah string'
Dan kita ingin mengubah semua huruf dalam variable anu
menjadi huruf besar (sering disebut sebagai huruf kapital atau huruf balok).
$ echo ${anu^^} $ INI ADALAH STRING
Atau kita hanya ingin mengubah huruf awalnya saja agar menjadi huruf besar.
$ echo ${anu^} $ Ini adalah string
Penggantian string
sed
dan awk
adalah kandidat utama untuk kerja regex seperti ini. Namun untuk penggantian string yang sederhana, Bash pun sanggup melakukannya. Syntax-nya pun tidak jauh beda dengan sed
atau awk
.
stringbaru=${stringlama/pola/pengganti}
Misal kita ingin mengganti semua huruf "i" dalam variable anu
menjadi huruf "o".
$ echo ${anu/i/o} $ oni adalah string
Oops. Ternyata hanya huruf "i" yang paling awal ditemui yang diganti menjadi huruf "o", sisanya tidak.
Lalu bagaimana jika kita ingin mengganti semua huruf "i" dalam variable anu
menjadi huruf "o"?
Kita bisa lakukan cara yang dinamakan global subtitution (penggantian menyeluruh) seperti berikut:
$ echo ${anu//i/o} $ ono adalah strong
Ya, bedanya hanya dengan menambahkan satu garis miring lagi pada garis miring pertama dalam syntax.
Parameter expansion
Dengan menggunakan parameter expansion kita akan bisa mendapat hasil serupa yang dihasilkan basename
atau dirname
. Dengan kata lain, kita tidak perlu lagi menggunakan perkakas tersebut.
Misal kita memiliki sebuah berkas yang terletak di:
letakberkas='/home/iza/Software/ISO/ubuntu-17.04-desktop-amd64.iso'
Dan hanya ingin mendapatkan nama berkasnya saja.
$ echo ${letakberkas##*/} $ ubuntu-17.04-desktop-amd64.iso
Atau hanya ingin mendapatkan letak menuju berkas tersebut:
$ echo ${letakberkas%/*} $ /home/iza/Software/ISO
Dapatkah Anda mengetahui di mana bedanya?
Ya, jika kita ingin memilah string yang terletak di bagian kanan pola (dalam contoh kali ini polanya adalah garis miring) maka kita menggunakan tanda pagar (#
), dan jika ingin memilah string yang terletak di bagian kiri pola kita akan menggunakan tanda persen (%
).
Untuk kegunaan lain dari parameter expansion ini bisa dibaca pada artikel blog GitHub Pages saya di: https://rizaumami.github.io/2017/03/04/bash-brace-expansion.
Substring
Bash juga memiliki fungsi substring sebagaimana "the real programming language".
Misal kita hanya ingin mendapatkan 2 karakter dimulai dari karakter ke 6 dari variable anu
:
$ echo ${anu:5:2} $ da
Katanya tadi karakternya dimulai dari 6? kenapa ditulis 5?
Harap diingat, Bash memulai hitungan karakter dari 0. Jadi jangan aneh jika karakter ke 6 itu ditulis sebagai 5.
Lalu bagaimana jika kita ingin memilah 2 karakter dari ujung string?
Kita bisa gunakan parameter offset -1. Jadi jika karakter awal dari depan dimulai dari 0, karakter awal dari belakang dimulai dari -1.
$ echo ${anu: -1:1} $ g
Perhatikan spasi di antara string dan parameternya. Tanpa spasi ini, syntax tidak akan bekerja.
Dari kedua contoh di atas, kita dapatkan garis besar:
{string: offset:banyakkarakter}
Untuk lebih membuat paham, perhatikan contoh berikut:
Ambil 4 karakter setelah karakter ke-7 dari awal string.
$ echo ${anu:6:4} $ alah
Ambil 3 karakter setelah karakter ke-5 dari ujung string.
$ echo ${anu: -5:3} $ tri
Operasi Hitung
Jika hanya memerlukan operasi hitung sederhana, bash pun dapat melakukannya.
Menjumlahkan 3 + 5.
$ echo $((3+5)) $ 8
mengalikan 8 x 9.
$ echo $((8*9)) $ 72
Membagi 4/2
$ echo $((4/2)) $ 2
Bash tidak bisa menampilkan hasil dalam pecahan, jadi 3 dibagi 2 hanya akan menghasilkan 1.
$ echo $((3/2)) $ 1
Operasi hitung campuran (8 + 3) x 7
$ echo $(((8+3)*7)) $ 77
Demikian untuk kali ini.
Intinya, Bash telah memiliki banyak kemampuan built-in yang membuat kita tidak lagi bergantung pada external utilities. Jika kita lebih mendayagunakan Bash built-in maka niscaya skrip yang kita buat akan lebih gegas dan ringan karena tidak perlu menjalankan banyak proses lain.
Tidak ada komentar:
Posting Komentar