Bekerja dengan Array di Linux Shell Scripting - Bagian 8

Bekerja dengan Array di Linux Shell Scripting - Bagian 8

Kita tidak dapat membayangkan bahasa pemrograman tanpa konsep array. Tidak peduli bagaimana mereka diimplementasikan di antara berbagai bahasa. Sebaliknya array membantu kita dalam mengkonsolidasikan data, serupa atau berbeda, dengan satu nama simbolis.

Bekerja dengan array di scripting shell

Di sini karena kami khawatir tentang skrip shell, artikel ini akan membantu Anda bermain -main dengan beberapa skrip shell yang memanfaatkan konsep array ini.

Inisialisasi dan penggunaan array

Dengan versi bash yang lebih baru, ini mendukung array satu dimensi. Array dapat dinyatakan secara eksplisit oleh menyatakan shell-builtin.

menyatakan -a var 

Tetapi tidak perlu menyatakan variabel array seperti di atas. Kita dapat memasukkan elemen individual ke array secara langsung sebagai berikut.

var [xx] = 

di mana 'xx' menunjukkan indeks array. Untuk dereference elemen array menggunakan sintaks braket keriting, saya.e.

$ var [xx] 

Catatan: Pengindeksan array selalu dimulai dengan 0.

Cara lain yang nyaman untuk menginisialisasi seluruh array adalah dengan menggunakan pasangan tanda kurung seperti yang ditunjukkan di bawah ini.

var = (element1 element2 elemen3… elementn) 

Ada cara lain untuk menetapkan nilai ke array. Cara inisialisasi ini adalah sub-kategori dari metode yang dijelaskan sebelumnya.

array = ([xx] = [xx] = ...) 

Kami juga dapat membaca/menetapkan nilai ke array selama waktu eksekusi menggunakan membaca shell-builtin.

Baca -Sebuah array 

Sekarang setelah menjalankan pernyataan di atas di dalam skrip, ia menunggu beberapa input. Kita perlu menyediakan elemen array yang dipisahkan oleh ruang (dan bukan pengembalian kereta). Setelah memasukkan nilai, tekan enter untuk mengakhiri.

Untuk melintasi elemen array yang juga dapat kita gunakan untuk loop.

untuk saya di "$ array [@]" lakukan #access setiap elemen sebagai $ i ... selesai 

Script berikut merangkum isi bagian khusus ini.

#!/bin/bash array1 [0] = satu array1 [1] = 1 echo $ array1 [0] echo $ array1 [1] array2 = (satu dua tiga) echo $ array2 [0] echo $  array2 [2] array3 = ([9] = sembilan [11] = 11) echo $ array3 [9] echo $ array3 [11] baca -a array4 untuk saya di "$ array4 [@] "Do Echo $ I Do Exit 0 

Berbagai operasi pada array

Banyak operasi string standar bekerja pada array . Lihatlah skrip sampel berikut yang mengimplementasikan beberapa operasi pada array (termasuk operasi string).

#!/bin/bash array = (Apple Bat Cat Dog Elephant Frog) #Print Elemen Pertama echo $ array [0] echo $ array: 0 #display semua elemen echo $ array [@] echo $ array [ @]: 0 #display semua elemen kecuali yang pertama echo $ array [@]: 1 #display elemen dalam kisaran echo $ array [@]: 1: 4 #length dari elemen pertama echo $  #array [0] echo $ #array #number dari elemen echo $ #array [*] echo $ #array [@] #replacing substring echo $ array [@] // a/a keluar 0 

Berikut ini adalah output yang dihasilkan saat mengeksekusi skrip di atas.

Apple Apple Bat Bat Kucing Anjing Gajah Katak Apple Bat Kucing Anjing Gajah Katak Kelelawar Kucing Anjing Gajah Katak Kelelawar Kucing Anjing Gajah 5 5 6 6 Apple Bat Kucing Anjing Gajah Katak 

Saya pikir tidak ada arti penting dalam menjelaskan skrip di atas secara rinci karena ini cukup jelas. Jika perlu saya akan mendedikasikan satu bagian dalam seri ini secara eksklusif pada manipulasi string.

Perintah substitusi dengan array

Perintah Substitusi Menetapkan output dari perintah atau beberapa perintah ke dalam konteks lain. Di sini dalam konteks array ini kita dapat memasukkan output perintah sebagai elemen individu array. Sintaks adalah sebagai berikut.

array = ($ (perintah)) 

Secara default konten dalam output perintah yang dipisahkan oleh ruang putih dicolokkan ke dalam array sebagai elemen individual. Skrip berikut ini daftar konten direktori, yaitu file dengan 755 izin.

#!/bin/bash err = 27 ext = 0 if [$# -ne 1]; lalu echo "penggunaan: $ 0" keluar $ err fi jika [ ! -d $ 1]; Kemudian echo "direktori $ 1 tidak ada" keluar dari $ err fi temp = ($ (temukan $ 1 -maxdepth 1 -type f)) untuk saya di "$ temp [@]" do perm = $ (ls -l $ i) if ['expr $ Perm: 0: 10: "-rwxr-xr-x"' -eq 10]; Kemudian echo $ i ##*/ fi selesai keluar $ ext 

Mensimulasikan array dua dimensi

Kita dapat dengan mudah mewakili matriks 2 dimensi menggunakan array 1 dimensi. Di dalam Pesanan utama baris Elemen representasi di setiap baris matriks secara progresif disimpan dalam indeks array secara berurutan. Untuk matriks MXN, formula untuk hal yang sama dapat ditulis sebagai.

matriks [i] [j] = array [n*i+j] 

Lihatlah skrip sampel lain untuk menambahkan 2 matriks dan mencetak matriks yang dihasilkan.

#!/bin/bash baca -p "Masukkan pesanan matriks [mxn]:" t m = $ t: 0: 1 n = $ t: 2: 1 echo "Masukkan elemen untuk matriks pertama" untuk saya di ' SEQ 0 $ (($ M-1)) 'do for j in' seq 0 $ (($ n-1)) 'lakukan baca x [$ (($ n*$ i+$ j))] selesai echo " Masukkan elemen untuk matriks kedua "untuk saya di 'seq 0 $ (($ m-1))' do for j in 'seq 0 $ (($ n-1))' lakukan baca y [$ (($ n* $ i+$ j))] z [$ (($ n*$ i+$ j))] = $ (($ x [$ (($ n*$ i+$ j))]+$ y [$ (($ n*$ i+$ j))])) selesai echo "setelah penambahan adalah" untuk saya di 'seq 0 $ (($ m-1))' lakukan untuk j di 'seq 0 $ ((( $ n -1)) 'do echo -ne "$ z [$ (($ n*$ i+$ j))] \ t" selesai echo -e "\ n" selesai keluar 0 

Meskipun ada batasan untuk menerapkan array di dalam scripting shell, itu menjadi berguna dalam beberapa situasi, terutama ketika kita menangani dengan substitusi perintah. Melihat dari sudut pandang administratif, konsep array membuka jalan bagi pengembangan banyak skrip latar belakang dalam sistem GNU/Linux.