Soal 1Notasi manakah yang mereferensikan argumen pertama di dalam sebuah fungsi shell?
Fungsi — Menyatukan Proses yang Sama di Satu Tempat
Artikel ini adalah bagian dari Kursus Linux yang membantumu menguasai keterampilan praktis Linux dari nol, mulai dari perintah dasar hingga shell script.
Definisikan logika dengan name() { ... }, terima argumen lewat $1, simpan variabel khusus fungsi dengan local, dan bercabang berdasarkan keberhasilan menggunakan return dan $? untuk memakai ulang logika validasi yang sama — dijelaskan dengan diagram dan dipraktikkan di terminal browser.
Memberi nama pada satu blok logika — mendefinisikan fungsi dan argumen
Daripada menulis logika yang sama berulang kali, kamu bisa membungkusnya dalam sebuah fungsi dan memanggilnya lewat nama.
Definisikan dengan name() { ... }, dan tulis isinya di antara { dan }.
Setelah didefinisikan, cukup tulis name untuk menjalankan logika tersebut.
Ini memecah skrip yang panjang menjadi unit-unit yang bermakna, dan kamu cukup memperbaiki di satu tempat saja.
Untuk mengoper nilai ke fungsi, tambahkan argumen setelah nama saat memanggilnya, seperti name foo bar.
Di dalam fungsi, $1 adalah argumen pertama dan $2 argumen kedua (notasi yang sama dengan parameter posisi milik skrip itu sendiri).
Bungkus argumen dengan tanda kutip ganda sebagai "$1", dan nilai yang mengandung spasi pun diperlakukan sebagai satu argumen.
greet() { # definisikan sebuah fungsi
echo "hello, $1"
}
greet alice # hello, alice
greet bob # hello, bob
greet alice bob masuk ke $1 dan $2, lalu isi fungsi memakainya untuk melakukan pekerjaannya.| Sintaks | Arti | Contoh |
|---|---|---|
name() { … } | Mendefinisikan sebuah fungsi | greet() { echo "hi $1"; } |
name args | Memanggil sebuah fungsi | greet alice |
$1 | Mereferensikan argumen pertama di dalam fungsi | echo "name=$1" |
$2 | Mereferensikan argumen kedua di dalam fungsi | echo "port=$2" |
Variabel yang hanya hidup di dalam fungsi — local
Ketika kamu mendeklarasikan local v=... di dalam fungsi, variabel itu hanya berlaku di dalam fungsi dan hilang saat fungsi selesai.
Tanpa local, kamu akan menimpa variabel dengan nama yang sama di luar fungsi juga, yang menyebabkan efek samping yang tidak terduga.
Untuk memakai ulang sebuah fungsi sebagai komponen dengan aman, jadikan variabel kerja yang dipakai di dalamnya local.
msg="outer"
show() {
local msg="inner" # variabel hanya di dalam fungsi
echo "in func: $msg"
}
show # in func: inner
echo "outside: $msg" # outside: outer (di luar tidak berubah)
local hanya berlaku di dalam fungsi. Meski namanya sama, nilai di luar tidak berubah.| Sintaks | Arti | Contoh |
|---|---|---|
local v=… | Membuat variabel yang hanya berlaku di dalam fungsi | local step=1 |
v=… | Variabel yang berlaku di seluruh skrip | status=ready |
Mengembalikan sukses atau gagal — return dan $?
Sebuah fungsi bisa mengembalikan kode keluar dengan return N.
Menurut konvensi 0 berarti sukses dan apa pun selain 0 berarti gagal, dan tepat setelah memanggilnya kamu bisa memeriksa nilai itu dengan $?.
Bercabang langsung berdasarkan keberhasilan sebuah fungsi seperti if check "$x"; then ... membuat alur validasi dan pemrosesan lebih mudah dibaca.
is_num() {
case "$1" in
*[!0-9]*|"") return 1 ;; # gagal jika mengandung non-digit atau kosong
*) return 0 ;;
esac
}
is_num 12; echo "12 -> $?" # 12 -> 0
is_num abc; echo "abc -> $?" # abc -> 1
return masuk ke $?, dan if bercabang dengan memperlakukan 0 sebagai sukses dan selain nol sebagai gagal.| Sintaks | Arti | Contoh |
|---|---|---|
return 0 | Keluar dari fungsi sebagai sukses | is_num 12; # success |
return 1 | Keluar dari fungsi sebagai gagal | is_num abc; # failure |
$? | Memeriksa nilai kembalian fungsi sebelumnya | is_num 12; echo $? |
if name x; then … | Bercabang langsung berdasarkan nilai kembalian | if is_num "$v"; then …; fi |
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa lingkup dari variabel yang dideklarasikan dengan local?
Soal 3Manakah yang memeriksa nilai kembalian dari fungsi paling terakhir?