GNU/Linux >> Belajar Linux >  >> Linux

Bash Seri Pemula #4:Menggunakan Array di Bash

Array untuk menyelamatkan!

Sejauh ini, Anda telah menggunakan sejumlah variabel dalam skrip bash Anda, Anda telah membuat beberapa variabel untuk menampung satu atau dua nama file dan nama pengguna.

Tetapi bagaimana jika Anda membutuhkan lebih dari beberapa variabel dalam skrip bash Anda; katakanlah Anda ingin membuat skrip bash yang membaca seratus input berbeda dari pengguna, apakah Anda akan membuat 100 variabel?

Untungnya, Anda tidak perlu melakukannya karena array menawarkan solusi yang jauh lebih baik.

Membuat array pertama Anda dalam skrip bash

Katakanlah Anda ingin membuat skrip bash timestamp.sh yang memperbarui stempel waktu dari lima file berbeda.

Pertama, gunakan pendekatan naif dengan menggunakan lima variabel berbeda:

#!/bin/bash

file1="f1.txt"
file2="f2.txt"
file3="f3.txt"
file4="f4.txt"
file5="f5.txt"

touch $file1
touch $file2
touch $file3
touch $file4
touch $file5

Sekarang, daripada menggunakan lima variabel untuk menyimpan nilai dari lima nama file, Anda membuat larik yang menampung semua nama file, berikut adalah sintaks umum larik di bash:

array_name=(value1 value2 value3 … )

Jadi sekarang Anda dapat membuat sebuah array bernama file yang menyimpan kelima nama file yang telah Anda gunakan di timestamp.sh scriptnya sebagai berikut:

files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")

Seperti yang Anda lihat, ini jauh lebih bersih dan efisien karena Anda telah mengganti lima variabel hanya dengan satu larik!

Mengakses elemen array di bash

Elemen pertama dari array dimulai pada indeks 0 dan untuk mengakses elemen ke-n dari array Anda menggunakan n -1 indeks.

Misalnya, untuk mencetak nilai dari 2 elemen larik file Anda, Anda dapat menggunakan pernyataan gema berikut:

echo ${files[1]}

dan untuk mencetak nilai dari 3 elemen array file Anda, Anda dapat menggunakan:

echo ${files[2]}

dan seterusnya.

Berikut skrip bash reverse.sh akan mencetak semua lima nilai dalam larik file Anda dalam urutan terbalik, dimulai dengan elemen larik terakhir:

#!/bin/bash

files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")

echo ${files[4]}
echo ${files[3]}
echo ${files[2]}
echo ${files[1]}
echo ${files[0]}

Saya tahu Anda mungkin bertanya-tanya mengapa begitu banyak pernyataan gema dan mengapa saya tidak menggunakan loop di sini. Ini karena Saya bermaksud untuk memperkenalkan konsep bash loop nanti di seri ini .

Anda juga dapat mencetak semua elemen array sekaligus:

echo ${files[*]}

f1.txt f2.txt f3.txt f4.txt f5.txt

Anda dapat mencetak jumlah total elemen larik file, yaitu ukuran larik :

echo ${#files[@]}

5

Anda juga dapat memperbarui nilai setiap elemen larik; misalnya, Anda dapat mengubah nilai elemen pertama dari larik file menjadi “a.txt” menggunakan penetapan berikut:

files[0]="a.txt"

Menambahkan elemen array di bash

Mari kita buat array yang berisi nama distribusi Linux populer:

distros=("Ubuntu" "Red Hat" "Fedora")

Arus array distro mengandung tiga elemen. Anda dapat menggunakan += operator untuk menambahkan (menambahkan) elemen ke akhir array.

Misalnya, Anda dapat menambahkan Kali ke array distro sebagai berikut:

distros+=("Kali")

Sekarang array distro berisi tepat empat elemen array dengan Kali menjadi elemen terakhir dari array.

Menghapus elemen array di bash

Pertama-tama mari kita buat array num yang akan menyimpan angka dari 1 hingga 5:

num=(1 2 3 4 5)

Anda dapat mencetak semua nilai dalam larik num:

echo ${num[*]}

1 2 3 4 5

Anda dapat menghapus 3 elemen dari array num dengan menggunakan unset bawaan cangkang:

unset num[2]

Sekarang jika Anda mencetak semua nilai array num:

echo ${num[*]}
1 2 4 5

Seperti yang Anda lihat, elemen ketiga dari nomor larik telah dihapus.

Anda juga dapat menghapus seluruh num array dengan cara yang sama:

unset num

Membuat larik hibrida dengan tipe data berbeda

Di bash, tidak seperti banyak bahasa pemrograman lainnya, Anda dapat membuat array yang berisi tipe data berbeda. Lihatlah user.sh berikut ini skrip bash:

#!/bin/bash

user=("john" 122 "sudo,developers" "bash")

echo "User Name: ${user[0]}"
echo "User ID: ${user[1]}"
echo "User Groups: ${user[2]}"
echo "User Shell: ${user[3]}"

Perhatikan array pengguna berisi empat elemen:

  1. "John" ----> Tipe Data String
  2. 122 --->  Jenis Data Bilangan Bulat
  3. "sudo,pengembang" ---> Tipe Data String
  4. "bash" --->  Jenis Data String

Jadi, tidak apa-apa untuk menyimpan tipe data yang berbeda ke dalam array yang sama. Bukankah itu luar biasa?

Ini membawa kita ke akhir tutorial ini; Saya harap Anda menikmatinya! Jika Anda menginginkan sesuatu yang lebih rumit dan contoh dunia nyata, lihat cara membagi string di bash menggunakan array.

Dan tentu saja, Anda dapat mempraktekkan apa yang baru saja Anda pelajari dengan memecahkan masalah dan merujuk ke solusi mereka jika Anda buntu atau membutuhkan petunjuk.

Bash Bab 4 Latihan SoalMasalah dan solusinya untuk berlatih Bash arrayBash-Bab-4-Pertanyaan-Latihan-Linux-Handbook.pdf29 KB

Di bab berikutnya, saya akan menunjukkan cara menggunakan berbagai operator aritmatika bash.

Memuat...
Linux
  1. Bagaimana Cara Membuat Array Elemen Unik Dari String/array Di Bash?

  2. Menggunakan Referensi Ke Variabel Bash String Di Sed?

  3. Perilaku Array dalam skrip bash dan zsh shell (Mulai Indeks 0 atau 1?)

  1. Bash Seri Pemula #9:Menggunakan Fungsi di Bash

  2. Bash Seri Pemula #8:Loop di Bash

  3. Bash Array Dengan Contoh

  1. Array di Bash Tidak Ditemukan

  2. Hapus spasi putih di setiap awal baris file, menggunakan bash

  3. Redirect semua output ke file menggunakan Bash di Linux?