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:
- Tidak diawali dengan angka.
- Tidak mengandung tanda pentung, tanda @, tanda pagar # dan asterisk (*).
- Variabel dengan huruf kapital seluruhnya, dikhususkan untuk variabel internal shell dan varibel environment.
Contoh:
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:
# 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:
# Salah
var = "string"
var= "string"
var ="string"
Melihat isi variabel
Isi variabel bisa dilihat dengan command echo
atau printf
:
$ 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:
- Menggunakan backticks `…`
- Menggunakan command substitution
$(...)
Contoh:
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:
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:
$ 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 $((...))
$ 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.
# 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.
$ 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.
$ 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.
$ 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:
# 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:
$ 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
$ echo "${array[@]}"
satu dua tiga
Untuk mengakses salah satu anggota array:
$ echo "${array[1]}"
dua
Associative array
Hampir sama dengan array terindeks, untuk melihat value tiap anggota array asosiatif:
$ echo "${array[@]}"
Fulan Surabaya S1 Lajang Swasta
Untuk melihat seluruh key dari tiap anggota array:
$ echo "${!array[@]}"
nama kota pendidikan status pekerjaan
Untuk melihat value dari key tertentu:
$ 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.
# _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:
$ array+=(empat lima)
$ echo "${array[@]}"
satu dua tiga empat lima
# Untuk array asosiatif juga sama
$ array+=([key]=value [key2]=value2)
Mengubah string menjadi array
$ 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
:
$ 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.
#!/usr/bin/env bash
rsync_options=(--archive --append --bwlimit=512k --progress ...)
rsync() {
rsync ${rsync_options[@]} ....
}
Referensi:
- https://www.geeksforgeeks.org/bash-script-define-bash-variables-and-its-types
- https://www.shell-tips.com/bash/math-arithmetic-calculation
Semoga bermanfaat, insyaAllah.