Kamus bash memberi Anda peta hash dan array asosiatif dalam skrip Shell Linux. Kami akan menunjukkan kepada Anda bagaimana menggunakan struktur data yang kuat dan bermanfaat dalam skrip Shell Linux Anda sendiri.
Mawar dengan nama lain
Nama formal untuk kamus adalah array asosiatif. Mereka juga disebut tabel hash dan peta hash. Mereka adalah struktur data yang berfungsi sama dengan array reguler, tetapi dengan perbedaan yang signifikan.
Array adalah kumpulan nilai data yang diadakan dalam satu struktur data. Untuk mengakses salah satu nilai data, yang dikenal sebagai elemen array, Anda perlu mengetahui posisi mereka dalam array. Posisi elemen array dalam array dikenal sebagai indeksnya, sehingga jenis-jenis array ini dikenal sebagai array yang diindeks. Mereka adalah jenis array yang paling umum digunakan.
Namun, mereka memiliki kekurangan. Bagaimana Anda mengakses elemen array jika Anda tidak tahu posisinya dalam daftar? Anda perlu menjalankan semua elemen dalam array, menguji untuk melihat apakah nilai di lokasi itu adalah yang Anda cari.
Array asosiatif mengatasi masalah itu. Mereka tidak menggunakan bilangan bulat untuk secara unik mengidentifikasi elemen array. Mereka menggunakan kata-kata unik yang dikenal sebagai kata kunci. Anda dapat mengambil nilai untuk elemen array dengan menggunakan kata kunci, terlepas dari di mana diposisikan dalam array. Dengan array yang diindeks, angka integer yang mewakili posisi dalam array berada dalam urutan menaik. Kata kunci dalam array asosiatif dapat dalam urutan apa pun.
Anda dapat mencari nilai dalam array asosiatif dengan mencari dengan kata kunci. Mencari kata dan mengambil nilai yang terkait dengan meniru mencari kata dalam kamus dan menemukan maknanya. Itu sebabnya array asosiatif dikenal sebagai kamus.
Bash 4.0 atau lebih tinggi
Array asosiatif didukung di The Bash Shell. versi 4.0 atau lebih tinggi. Jika Anda menggunakan distribusi Linux saat ini, Anda harus baik-baik saja. Untuk memeriksa versi bash Anda, gunakan perintah ini:
Bash --version
Mesin yang digunakan untuk meneliti artikel ini memiliki bash 5.1.4 diinstal, jadi kami baik untuk pergi.
Prinsip dasar
Untuk membuat array asosiatif pada baris perintah terminal atau dalam skrip, kami menggunakan perintah BASH DECARE. NS
-A
(Associative) Opsi memberi tahu BASH bahwa ini akan menjadi array asosiatif dan bukan array yang diindeks.
mendeklarasikan akronim
Ini menciptakan array asosiatif yang disebut "akronim."
Untuk memasukkan beberapa data ke dalam array kami, kami perlu memberikan kata kunci dan nilai. Kita dapat melakukan ini menggunakan format ini:
array-name [tombol] = nilai
Mari tambahkan beberapa elemen array:
Akronim [ACK] = Pengakuan
Akronim [BGP] = "Border Gateway Protocol"
Akronim [CIDR] = "Routing Inter Domain Berkelas"
Akronim [DHCP] = "Protokol Konfigurasi Host Dinamis"
Akronim [EOF] = "ujung bingkai"
Perintah-perintah tersebut mendefinisikan lima elemen array. Perhatikan bahwa nilai-nilai dibungkus dengan tanda kutip jika ada ruang dalam nilai. Kata kunci kami dimasukkan dalam urutan abjad, tetapi mereka dapat dimasukkan dalam urutan apa pun yang Anda suka. Kata kunci harus unik. Jika Anda mencoba membuat dua entri dengan kata kunci yang sama, nilai kedua yang Anda masukkan akan menimpa yang pertama. Anda masih hanya memiliki satu entri dengan kata kunci itu, dan itu akan dikaitkan dengan nilai kedua yang Anda tambahkan.
Untuk mengambil nilai dari array, kami menggunakan perintah dalam format ini:
$ {array-name [tombol]}
Kita dapat menggunakan gema untuk mengirim output ke jendela terminal:
echo $ {acronys [ack]}
echo $ {acronys [dhcp]}
Menggunakan loop.
Array meminjamkan diri untuk digunakan dalam loop dengan sangat baik. Array asosiatif tidak terkecuali. Loop memberikan cara yang efisien untuk memunculkan urutan tindakan tanpa bagian kode berulang. Sebelum kita melihat loop, ada cara yang efisien untuk mendeklarasikan array.
Kami membuat array menggunakan
menyatakan
perintah (sama
-A
Opsi seperti sebelumnya), tetapi kami menyediakan kata kunci dan nilai sebagai daftar pada baris perintah.
mendeklarasikan -a negara = ([alb] = albania [bhr] = Bahrain [CMR] = Kamerun [DNK] = Denmark [EGY] = Mesir)
Nama array adalah "negara," dan terhubung ke daftar nilai dengan tanda sama dengan tanda "
=
. " Daftar Nilai dibungkus dalam tanda kurung "
()
"Dan setiap kata kunci dibungkus dengan kurung"
[]
". Perhatikan bahwa tidak ada koma yang memisahkan nilai. Jika Anda memiliki string nilai yang berisi spasi, Anda harus membungkusnya dalam tanda kutip.
Untuk membuat array asosiatif mengembalikan kata kunci, bukan nilai, tambahkan tanda seru "
!
"Di depan nama array. Simbol pada "
@
"Dapat digunakan sebagai wildcard, yang berarti semua elemen array.
Ini
untuk
Loop akan mencantumkan semua kata kunci:
Untuk Kunci di "$ {! Negara [@]}"; lakukan echo $ tombol; dilakukan
Perhatikan bahwa kata kunci tidak selalu tercantum dalam urutan yang dibuat, tetapi itu tidak masalah. Array asosiatif tidak bergantung pada indeks yang dipesan.
Kami juga dapat menggunakan ekspansi parameter untuk membuat daftar semua kata kunci. Mereka akan tercantum pada satu baris, bukan satu per baris.
Echo "$ {! Negara [@]}"
echo "$ {! Akronim [@]}"
Kami dapat menambah kami
untuk
loop untuk mencetak kata kunci dan nilai pada saat yang sama.
Untuk kunci dalam "$ {! Akronim [@]}"; Lakukan echo "$ Key - $ {akronim [$ tombol]}"; dilakukan
Jika kita ingin tahu berapa banyak elemen yang ada dalam array, kita dapat menggunakan hash "#" di depan nama array bukannya tanda seru.
Echo "$ {! Negara [@]}"
echo "$ {! Akronim [@]}"
Memeriksa bahwa elemen array ada
Jika Anda mencari kata kunci tetapi tidak ada elemen array, nilai pengembalian akan menjadi string kosong. Terkadang bermanfaat untuk memiliki indikator yang berbeda untuk ada atau tidak adanya elemen array.
Kita dapat memeriksa keberadaan elemen array menggunakan "
+ _
"Operator. Perhatikan bahwa ini datang setelah kata kunci, bukan di depan nama array seperti operator sebelumnya yang pernah kita lihat.
Jika [$ {akronim [EOF] + _}]; lalu gema "ditemukan"; Echo lain "tidak ditemukan"; fi
Jika [$ {acronim [ftp] + _}]; lalu gema "ditemukan"; Echo lain "tidak ditemukan"; fi
Elemen array dengan kata kunci "EOF" ditemukan dalam array, tetapi elemen array dengan kata kunci "ftp" tidak.
Menambahkan Elemen Array.
Menambahkan elemen baru ke array asosiatif itu mudah. Tidak seperti beberapa bahasa pemrograman, Anda tidak perlu menentukan ukuran array Anda saat Anda mendeklarasikannya. Anda dapat terus menambahkan elemen baru tanpa menabrak batas atas yang telah ditentukan.
Untuk menambahkan elemen baru ke array, kami menggunakan "
+ =
"Operator.
Negara + = ([[FJI] = Fiji)
Echo "$ (# negara [@]}"
echo $ {negara [FJI]}
Jumlah elemen dalam array sekarang enam, dan mencari kata kunci baru menemukan elemen array dan mengembalikan nilainya.
Menghapus elemen dan array array
NS
tak disetel
Perintah digunakan untuk menghapus elemen array. Jika kata kunci memiliki spasi di dalamnya, bungkus dalam tanda kutip.
Untet Akronim [EOF]
Jika [$ {akronim [EOF] + _}]; lalu gema "ditemukan"; Echo lain "tidak ditemukan"; fi
Untuk menghapus seluruh array, gunakan
tak disetel
dengan nama array.
Negara-negara Untet
Menggunakan variabel dengan array
Menggunakan variabel dengan array asosiatif sangat mudah. Dalam contoh ini, kami akan menetapkan kunci variabel ke string "EOF." Kami akan menggunakan variabel ketika kami menambahkan elemen array baru ke array. Sebenarnya, kami mengganti elemen array yang kami hapus sebelumnya.
Kami akan mengambil elemen array baru dengan menyebutnya dengan kata kunci baru dan juga, dengan menggunakan variabel. Jika kata kunci berisi spasi, Anda harus membungkus nama variabel dalam tanda kutip.
Kunci = EOF
Akronim [$ Key] = "ujung bingkai"
echo $ {acronys [eof]}
echo $ {acronys [$ tombol]}
Menjadi kreatif
Contoh kami telah menjadi koleksi informasi di mana setiap elemen array terlepas dari semua yang lain, seperti kamus. Masing-masing adalah definisi unik. Tetapi array asosiatif dapat dengan mudah memegang berbagai informasi semua terkait dengan satu hal, seperti spesifikasi dari berbagai keping perangkat keras komputer:
mendeklarasikan -a Spesifikasi
Spesifikasi [CPU] = "Dual Core AMD Ryzen 5 3600"
Spesifikasi [Kecepatan] = "3600 MHz"
Spesifikasi [Kernel] = "5.11.0-17-Generic x86_64"
Spesifikasi [MEM] = "1978.5 MIB"
Spesifikasi [Penyimpanan] = "32 GIB"
Spesifikasi [Shell] = "Bash"
Echo $ {spesifikasi [CPU]}
Menulis secara efisien dalam bahasa berarti mengetahui mekanisme dan struktur yang ditawarkannya, dan memilih yang paling tepat untuk masalah yang Anda coba selesaikan. Array asosiatif memberi Anda cara yang mudah digunakan untuk menyimpan data yang dapat Anda cari berdasarkan nama, seperti kamus.