Pada artikel kali ini, saya akan membahas mengenai shell argumens, yaitu bagaimana agar kita dapat memasukkan parameter tertentu saat memanggil script yang telah kita tulis atau saat memanggul fungsi yang telah kita definisikan.
Parameter/argumen
Mari kita lihat pada command cp
berikut ini:
|
|
Command diatas bisa diartikan dengan “menyalin secara paksa file1
sebagai file2
”.
Paksaan yang dimaksud adalah jika file2
sebelumnya telah ada, maka langsung menimpa file2
tersebut dengan file1
tanpa memberitahu user terlebih dahulu. Pada command cp
, struktur dasar penggunaannya adalah:
|
|
Sintaks yang berada dalam kurung kotak, merupakan parameter opsional, alias boleh diberi boleh tidak. Kemudian dalam kurung lancip, adalah wajib. Maka pemberian parameter FILE SUMBER
dan FILE TUJUAN
adalah wajib.
Interpretasi shell bash
Jika sintaks diatas kita bedah satu persatu, maka shell bash akan menginterpretasikan masing-masing parameter/argumen yang diinputkan sebagai variabel-variabel yang bisa diakses. Variabel-variabel tersebut dimulai dari variabel $0
yang itu merupakan nama program/script yang dijalankan, kemudian $1
yang merupakan argumen pertama, hingga $n
(dimana n adalah jumlah variabel).
Sehingga, pada contoh diatas, maka bisa didapatkan variabel-variabel berikut:
$0
adalahcp
$1
adalah-f
$2
adalahfile1
, dan$3
adalahfile2
Percobaan
Sebagai pembuktian, mari dicoba dengan script coba.sh
sederhana berikut ini:
|
|
Hasil tesnya adalah
|
|
Ini juga bisa digunakan untuk fungsi:
|
|
Maka saat dijalankan, akan mengeluarkan output:
|
|
$0
akan selalu merujuk pada program/shell script yang dijalankan, bukan fungsi yang dipanggil.Contoh script
|
|
|
|
Variabel $#, $@ dan $*
$#
Variabel $#
digunakan untuk mengetahui jumlah parameter yang diberikan. Misalnya:
|
|
Ini bisa dimanfaatkan salahsatunya untuk melakukan validasi apakah user memberikan argumen atau tidak:
|
|
Maka saat dicoba:
|
|
$@ dan $*
Dua variabel ini digunakan untuk mengakses seluruh argumen yang diberikan.
Contoh 1
|
|
|
|
Pertanyaannya, jika outputnya sama, mengapa dibedakan? Pada contoh diatas, tidak akan ketara perbedaannya. Mari dilihat pada contoh berikutnya.
Contoh 2
|
|
|
|
Maka:
- Variabel
$@
akan expand dan masing-masingnya menjadi argumen. - Variabel
$*
akan expand menjadi satu string utuh.
Nah, untuk bisa memahami kesimpulannya, maka saya coba berikan contoh script sederhana berikut ini.
Contoh 3
|
|
|
|
Bisa diperhatikan, pada $@
, sintaks file -- "$@"
, input ./coba.sh file1 file2 file3
akan terexpand sesuai dengan masing-masing argumennya file -- "file1" "file2" "file3"
dengan total argumen sebanyak 4.
Sedangkan pada $*
input yang sama, akan terekspand menjadi file -- "file1 file2 file3"
. Jika dipecah kembali, maka akan didapatkan total 2 argumen saja:
- Argumen 1:
--
- Argumen 2:
file1 file2 file3
Sehingga, secara harfiah, file yang bernama “file1 file2 file3” memang tidak ada pada folder tersebut.
Semoga bermanfaat, barakallahufiikum.