Bekerja dengan Arrays di Linux Shell Scripting - Bahagian 8

Bekerja dengan Arrays di Linux Shell Scripting - Bahagian 8

Kita tidak dapat membayangkan bahasa pengaturcaraan tanpa konsep tatasusunan. Tidak kira bagaimana ia dilaksanakan di antara pelbagai bahasa. Sebaliknya array membantu kami dalam menggabungkan data, serupa atau berbeza, di bawah satu nama simbolik.

Bekerja dengan tatasusunan dalam skrip shell

Di sini kerana kami bimbang tentang skrip shell, artikel ini akan membantu anda bermain -main dengan beberapa skrip shell yang menggunakan konsep tatasusunan ini.

Inisialisasi dan penggunaan array

Dengan versi Bash yang lebih baru, ia menyokong tatasusunan satu dimensi. Pelbagai boleh diisytiharkan secara eksplisit oleh mengisytiharkan Shell-Builtin.

mengisytiharkan -a var 

Tetapi tidak perlu mengisytiharkan pembolehubah array seperti di atas. Kita boleh memasukkan elemen individu untuk menyusun secara langsung seperti berikut.

var [xx] = 

di mana 'xx' menandakan indeks array. Ke elemen array dereference Gunakan sintaks kurungan kerinting, i.e.

$ var [xx] 

Catatan: Pengindeksan array selalu bermula dengan 0.

Cara lain yang mudah untuk memulakan keseluruhan array adalah dengan menggunakan pasangan kurungan seperti yang ditunjukkan di bawah.

var = (elemen1 elemen2 elemen3 ... elementn) 

Masih ada cara lain untuk memberikan nilai kepada tatasusunan. Cara inisialisasi ini adalah subkategori kaedah yang dijelaskan sebelumnya.

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

Kita juga boleh membaca/memberikan nilai ke array semasa masa pelaksanaan menggunakan Baca Shell-Builtin.

baca -array 

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

Untuk melintasi elemen array yang kita juga boleh gunakan untuk gelung.

Untuk saya dalam "$ array [@]" lakukan #Access setiap elemen sebagai $ i ... selesai 

Skrip berikut meringkaskan kandungan bahagian tertentu 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 i dalam "$ array4 [@] "Adakah echo $ saya buat keluar 0 

Pelbagai operasi pada tatasusunan

Banyak operasi rentetan standard berfungsi pada array . Lihat skrip sampel berikut yang melaksanakan beberapa operasi pada tatasusunan (termasuk operasi rentetan).

#!/bin/bash array = (Apple Bat Cat Dog Elephant Frog) #print Element First Echo $ Array [0] echo $ array: 0 #display semua elemen echo $ array [@] echo $ array [ @]: 0 #display semua elemen kecuali yang pertama echo $ array [@]: 1 #display elements dalam julat echo $ array [@]: 1: 4 #length first element echo $  #array [0] echo $ #array #number elemen echo $ #array [*] echo $ #array [@] #replacing substring echo $ array [@] // a/a keluar 0 

Berikut adalah output yang dihasilkan untuk melaksanakan skrip di atas.

Apple Apple Apple Bat Cat Dog Elephant Katak Apple Bat Cat Dog Gajah Katak Bat Kucing Dog Elephant Frog Bat Cat Dog Elephant 5 5 6 6 Apple Bat Cat Dog Elephant Katak 

Saya rasa tidak ada kepentingan dalam menerangkan skrip di atas secara terperinci kerana ia jelas-jelas. Sekiranya perlu saya akan mendedikasikan satu bahagian dalam siri ini secara eksklusif pada manipulasi rentetan.

Penggantian arahan dengan tatasusunan

Penggantian Perintah memberikan output arahan atau arahan berganda ke dalam konteks lain. Di sini dalam konteks tatasusunan ini kita dapat memasukkan output arahan sebagai elemen individu array. Sintaks adalah seperti berikut.

array = ($ (perintah)) 

Secara lalai kandungan dalam output arahan yang dipisahkan oleh ruang putih dipasang ke dalam array sebagai elemen individu. Skrip berikut menyenaraikan kandungan direktori, yang merupakan fail dengan 755 kebenaran.

#!/bin/bash err = 27 ext = 0 jika [$# -ne 1]; kemudian echo "penggunaan: $ 0" keluar $ err fi jika [ ! -d $ 1]; Kemudian echo "direktori $ 1 tidak wujud" keluar $ err fi temp = ($ (cari $ 1 -MaxDepth 1 -type f)) untuk i dalam "$ temp [@]" do Perm = $ (ls -l $ i) jika ['expr $ perm: 0: 10: "-rwxr-xr-x"' -eq 10]; kemudian echo $ i ##*/ fi selesai keluar $ ext 

Mensimulasikan tatasusunan dua dimensi

Kita boleh dengan mudah mewakili matriks 2-dimensi menggunakan array 1 dimensi. Dalam Perintah utama baris elemen perwakilan dalam setiap baris matriks secara progresif disimpan dalam indeks array dengan cara yang berurutan. Untuk matriks MXN, formula untuk yang sama boleh ditulis sebagai.

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

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

#!/bin/bash baca -p "Masukkan perintah matriks [mxn]:" t m = $ t: 0: 1 n = $ t: 2: 1 echo "Masukkan unsur -unsur untuk matriks pertama" untuk saya dalam ' seq 0 $ (($ m-1)) 'lakukan untuk j dalam' seq 0 $ (($ n-1)) 'Do Baca x [$ (($ n*$ i+$ j))] selesai echo " Masukkan unsur-unsur untuk matriks kedua "untuk saya dalam 'seq 0 $ (($ m-1))' lakukan untuk j dalam 'seq 0 $ (($ n-1))' Do baca y [$ (($ n* $ i+$ j))] z [$ (($ n*$ i+$ j))] = $ (($ x [$ (($ n*$ i+j))]+$ y [$ (($ n*$ i+$ j)))) dilakukan echo "matriks selepas penambahan adalah" untuk saya dalam 'seq 0 $ (($ m-1))' lakukan untuk j dalam 'seq 0 $ ((( $ n -1)) 'do echo -ne "$ z [$ (($ n*$ i+$ j))] \ t" selesai echo -e "\ n" selesai 0 

Walaupun terdapat batasan untuk melaksanakan susunan di dalam skrip shell, ia menjadi berguna dalam beberapa situasi, terutama ketika kita mengendalikan dengan penggantian arahan. Melihat dari sudut pandang pentadbiran, konsep tatasusunan membuka jalan bagi pembangunan skrip latar belakang dalam sistem GNU/Linux.