Bismillah

Pada artikel ini, saya akan menjelaskan bagaimana cara membuat variabel, array, dan lain-lain yang berkaitan, pada shell Bash.

Seperti yang sudah pernah dibahas pada artikel Belajar Bash Scripting lain, bahwa tentunya Bash Scripting yang dibahas ini tidaklah POSIX-compliant atau istilahnya Bashism.

Aturan penamaan

Dalam membuat variabel atau array, ketentuan dalam pemberian nama adalah sebagai berikut:

  1. Tidak diawali dengan angka.
  2. Tidak mengandung tanda pentung, tanda @, tanda pagar # dan asterisk (*).
  3. Variabel dengan huruf kapital seluruhnya, dikhususkan untuk variabel internal shell dan varibel environment.

Contoh:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
1variabel # salah
!variabel # salah
@variabel # salah
vari*abel # salah
#variabel # salah
vari#abel # salah
vari!abel # salah
vari@abel # salah

SHELL     # sudah digunakan sebagai environment variable
HOSTNAME  # sudah digunakan sebagai environment variable
REPLY     # sudah digunakan dalam BASH internal variable

variabel  # benar
Variabel  # benar
vAriabel  # benar
vari_abel # benar
_variabel # benar
vari4bel  # benar
variabel1 # benar

Variabel

Membuat variabel

Pada Bash shell, variabel bisa dibuat dengan cara seperti ini:

1
2
3
4
5
6
7
8
# Tanpa petik
var=string

# Petik
var="string"

# Petik tunggal
var='string'

Perbedaan mengenai penggunaan tanda petik dan petik tunggal akan dijelaskan nanti.

Perlu diperhatikan bahwa untuk membuat variabel, tidak boleh ada spasi diantara tanda =, misalnya:

1
2
3
4
# Salah
var = "string"
var= "string"
var ="string"

Melihat isi variabel

Isi variabel bisa dilihat dengan command echo atau printf:

1
2
3
4
5
$ var="Bismillah"
$ echo "$var"
Bismillah
$ printf '%s\n' "$var"
Bismillah

Mengisi variabel dari output suatu command

Suatu variabel bisa diisi dengan output dari suatu command tertentu dengan menggunakan 2 cara:

  1. Menggunakan backticks `…`
  2. Menggunakan command substitution $(...)

Contoh:

1
2
var=`uname -r`
var=$(uname -r)

Cara kedua lebih disarankan karena 1) backticks sudah dianggap telah deprecated (ditinggalkan), 2) command substitution memungkinkan untuk digunakan secara berlapis. Misal:

1
var=$(ls -1 $(pwd))

Menambah isi variabel (append)

Menambah isi variabel (yang berupa string) bisa dilakukan seperti membuat variabel tersebut namun tidak sekedar dengan tanda = saja, tetapi dengan +=, contoh:

1
2
3
4
5
6
$ var=Hello
$ echo "$var"
Hello
$ var+=", World!"
$ echo "$var"
Hello, World!

Kalkulasi aritmatis pada variabel (integer)

Membuat variabel berupa hasil kalkulasi 2 bilangan bulat (atau lebih), bisa dilakukan dengan dua tanda kurung $((...))

1
2
3
4
5
6
7
8
$ bil1=5
$ bil2=9
$ hasil=$((bil1 + bil2))
$ echo $hasil
14
$ kali=$((bil1 * bil2))
$ echo $kali
45

Variabel readonly

Variabel readonly adalah variabel yang tidak bisa berubah setelah ditetapkan isinya, sama dengan konsep variabel konstan pada keumuman bahasa pemrograman.

1
2
3
4
5
6
7
8
# cara 1
$ readonly var=string

# cara 2
$ declare -r var=string

$ var=strong
bash: var: readonly variable

Variabel lokal

Variabel lokal adalah variabel yang ruang lingkupnya hanya pada suatu fungsi saja. Ketika dipanggil diluar fungsi tersebut, maka variabel yang dipanggil tersebut adalah variabel yang berbeda.

1
2
3
4
5
6
7
8
9
$ var=xyz
$ fungsi() {
  local var=abc # atau declare var=abc
  echo "$var"
}
$ echo "$var"
xyz
$ fungsi
abc

Membuat variabel dengan printf

Command printf adalah salah satu tool builtin pada shell Bash. Selain berfungsi seperti echo, printf juga bisa digunakan untuk menetapkan suatu variabel.

1
2
3
$ printf -v var '%s\n' string
$ echo "$var"
string

Membuat variabel berdasarkan input pengguna

Yang dimaksud disini adalah membuat variabel dengan cara interaktif, yaitu membutuhkan inputan dari pengguna shell. Seperti “Siapa namamu?”, kemudian pengguna mengisikan namanya.

1
2
3
4
$ read -r -p "Siapa namamu? " nama
Siapa namamu? Fulan bin Fulan
$ echo "Namaku: $nama"
Namaku: Fulan bin Fulan

Flag -r diatas berfungsi untuk menghindari backslash dari melakukan escaping karakter apapun. Sedangkan -p berfungsi untuk mem-print serangkaian kata yang sudah ditentukan sebelum melakukan read. Ini guna menghemat dari penggunaan echo sebelum read.

Kasus penggunaan tool read ini diantaranya adalah seperti melakukan konfirmasi Yes/No sebelum menjalankan command tertentu; atau membuat script yang interaktif, dan sebagainya.

Array

Diantara shell-shell yang ada, diantaranya ada yang mendukung array dan ada yang tidak. Bash adalah salah satu yang mendukung array. Jenis array yang bisa dibuat pada shell bash adalah Associative Array dan Indexed Array

Array terindeks (indexed array)

Yang dimaksud dengan indexed array adalah array yang tiap anggotanya memiliki nomor indeks masing-masing yang dimulai dari nol (zero indexed). Cara membuatnya adalah seperti berikut:

1
2
3
4
5
# cara 1
array=(satu dua tiga)

# cara 2
declare -a array=(satu dua tiga)

Array asosiatif (associative array)

Associative array, adalah jenis array yang memiliki key dan value. Cara membuat:

1
2
3
$ declare -A array=([nama]=Fulan [kota]=Surabaya [pendidikan]=S1)
$ array[status]="Lajang"
$ array[pekerjaan]="Swasta"

Melihat isi array

Untuk melihat seluruh isi array:

Indexed array

1
2
$ echo "${array[@]}"
satu dua tiga

Untuk mengakses salah satu anggota array:

1
2
$ echo "${array[1]}"
dua

Associative array

Hampir sama dengan array terindeks, untuk melihat value tiap anggota array asosiatif:

1
2
$ echo "${array[@]}"
Fulan Surabaya S1 Lajang Swasta

Untuk melihat seluruh key dari tiap anggota array:

1
2
$ echo "${!array[@]}"
nama kota pendidikan status pekerjaan

Untuk melihat value dari key tertentu:

1
2
$ echo "${array[status]}"
Lajang

Mengakses array menggunakan loop

Mengakses array menggunakan loop memungkinkan untuk melakukan sesuatu terhadap tiap-tiap isi array, baik itu array asosiatif atau terindeks.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# _Indexed_ array
$ arr=(satu dua tiga empat)
$ for angka in ${arr[@]}; do echo "Putaran ke-$angka"; done
Putaran ke-satu
Putaran ke-dua
Putaran ke-tiga
Putaran ke-empat

# Associative array
$ declare -A arr=([nama]=Alan [kota]=Surabaya [asal]=Jakarta)
$ for key in ${!arr[@]}; do echo "Data $key => ${arr[$key]}"; done
Data nama => Alan
Data kota => Surabaya
Data asal => Jakarta

Menambah isi array

Cara menambah isi array adalah seperti berikut:

1
2
3
4
5
6
$ array+=(empat lima)
$ echo "${array[@]}"
satu dua tiga empat lima

# Untuk array asosiatif juga sama
$ array+=([key]=value [key2]=value2)

Mengubah string menjadi array

1
2
3
4
$ var="satu dua tiga empat lima"
$ array=( $var )
# atau
$ declare -a array <<< $var

Penjelasan mengenai <<< ada pada artikel mendatang, insyaAllah.

Menkonversi file yang berisi list menjadi array

Jika ada suatu file yang berisi suatu list (bisa berupa daftar string, dsb) dan hendak dikonversi menjadi array, maka bisa menggunakan mapfile:

1
2
3
4
5
6
7
8
$ cat file
aaaa
bbbb
cccc
dddd
$ mapfile list < file
$ echo ${list[3]}
dddd

Kasus penggunaan array

Pada sebuah script, menentukan sekumpulan options dari suatu command tertentu. Misalnya, script tersebut menggunakan rsync dan ada sekumpulan options dan flag yang sudah ditentukan untuk setiap panggilannya.

1
2
3
4
5
6
7
#!/usr/bin/env bash

rsync_options=(--archive --append --bwlimit=512k --progress ...)

rsync() {
    rsync ${rsync_options[@]} ....
}

Referensi:

Semoga bermanfaat, insyaAllah.