Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development
Code

Dasar-Dasar Bash Script

by
Difficulty:BeginnerLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Bagus Dwi (you can also view the original English article)

Skrip shell secara luas digunakan di dunia UNIX. Mereka sangat baik untuk mempercepat tugas-tugas yang berulang dan menyederhanakan logika eksekusi kompleks. Mereka dapat sesederhana satu set perintah, atau mereka dapat mengatur tugas-tugas kompleks. Dalam tutorial ini, kita akan mempelajari lebih lanjut tentang bahasa skrip Bash dengan menulis skrip contoh langkah demi langkah.


Masalah Fizz-Buzz

Salah satu cara terbaik untuk belajar tentang bahasa baru adalah dengan memberi contoh. Mari kita mulai dengan satu.

Masalah Fizz-Buzz adalah masalah yang sangat sederhana. Ini menjadi terkenal setelah seorang programmer, bernama Imran, menggunakannya sebagai tes wawancara. Ternyata 90-99,5% dari kandidat untuk pekerjaan pemrograman tidak dapat menulis program yang paling sederhana. Imran mengambil game Fizz-Buzz sederhana ini dan meminta kandidat untuk menyelesaikannya. Banyak yang mengikuti contoh Imran, dan, hari ini, ini adalah salah satu pertanyaan yang paling sering ditanyakan untuk pekerjaan pemrograman. Jika Anda menyewa, dan perlu cara untuk memfilter hingga 90% dari kandidat, ini adalah masalah besar untuk disajikan.

BErikut ini adalah peraturannya:

  • Ambil dan cetak angka antara 1 dan 100.
  • Ketika nomor habis dibagi 3, cetak "Fizz" sebagai ganti nomor.
  • Ketika itu habis dibagi 5, cetak "Buzz" sebagai gantinya.
  • Ketika habis dibagi 3 dan 5, cetak "FizzBuzz".

Hanya itu saja. Saya yakin sebagian besar dari Anda sudah dapat memvisualisasikan dua atau tiga if pernyataan untuk memecahkan masalah ini. Mari kita kerjakan ini menggunakan bahasa skrip Bash.


Shebang

Sebuah shebang mengacu pada kombinasi karakter tanda hash dan tanda seru: #!. Program loader akan mencari shebang di baris pertama skrip, dan menggunakan interpreter yang ditentukan di dalamnya. Sebuah shebang terdiri dari sintaks berikut:#!interpreter [parameters]. Interpreter adalah program yang digunakan untuk menafsirkan bahasa kita. Untuk bash scripting, itu akan menjadi /bin/bash. Misalnya, jika Anda ingin membuat skrip di PHP dan menjalankannya di konsol, Anda mungkin ingin menggunakan /usr/bin/php (atau jalur ke PHP yang dapat dijalankan pada mesin Anda) sebagai penerjemah.

Ya, itu benar-benar berfungsi! Bukankah ini sederhana? Pastikan untuk membuat file Anda dapat dieksekusi terlebih dahulu. Setelah Anda melakukannya, skrip ini akan menampilkan informasi PHP Anda seperti yang Anda harapkan.

Kiat: Untuk memastikan bahwa skrip Anda akan berfungsi pada sebanyak mungkin sistem, Anda dapat menggunakan / bin/env di shebang. Dengan demikian, bukannya /bin/bash, Anda bisa menggunakan /bin/env bash, yang akan bekerja pada sistem di mana bash yang dapat dieksekusi tidak berada di /bin.


Hasil Teks

Output dari skrip akan sama dengan, seperti yang Anda harapkan, apa pun yang dikeluarkan dari perintah Anda. Namun, jika kita secara eksplisit ingin menulis sesuatu ke layar, kita dapat menggunakan echo.

Menjalankan skrip ini akan mencetak "Hello World" di konsol.


Memperkenalkan Variabel

Seperti halnya bahasa pemrograman, saat menulis skrip shell, Anda dapat menggunakan variabel.

Kode ini menghasilkan pesan "Hello World" yang sama persis. Seperti yang Anda lihat, untuk menetapkan nilai ke variabel, cukup tulis namanya - kecualikan tanda dolar di depannya. Juga, berhati-hatilah dengan spasi; tidak boleh ada spasi di antara nama variabel dan tanda yang sama. message="Hello" ketimbang message = 'Hello'

Ketika Anda ingin menggunakan variabel, Anda dapat mengambil nilai dari itu seperti yang kami lakukan dalam perintah echo. Menambahkan kembali $ ke nama variabel akan mengembalikan nilainya.

Tip: Semicolons tidak diperlukan dalam bash scripting. Anda dapat menggunakannya dalam banyak kasus, tetapi hati-hati: mereka mungkin memiliki arti yang berbeda dari yang Anda harapkan.


Mencetak Angka Antara 1 dan 100

Melanjutkan dengan proyek demo kami, kami perlu menggilir semua nomor antara 1 dan 100. Untuk ini, kami harus menggunakan for pengulangan.

Ada beberapa hal baru yang perlu diperhatikan dalam contoh ini - yang dengan cara ini, mencetak semua angka dari 1 hingga 100, satu nomor dalam satu waktu.

  • Sintaks for di Bash adalah: for VARIABLE in RANGE; do COMMAND done.
  • Kurung kurawal akan mengubah 1..100 menjadi kisaran dalam contoh kita. Mereka digunakan dalam konteks lain juga, yang akan kami tinjau segera.
  • do dan for sebenarnya dua perintah terpisah. Jika Anda ingin menempatkan dua perintah pada satu baris, Anda harus memisahkannya. Salah satu caranya adalah dengan menggunakan titik koma. Atau Anda bisa menulis kode tanpa titik koma dengan memindahkan do ke baris berikut.

Keputusan Pertama

Sekarang kita tahu bagaimana mencetak semua angka antara 1 dan 100, saatnya untuk membuat keputusan pertama.

Contoh ini akan menampilkan "Fizz" untuk angka yang dapat dibagi oleh 3. Sekali lagi, kita harus berurusan dengan sedikit sintaks baru. Mari kita ambil satu per satu.

  • if..then..else..fi - ini adalah sintaks klasik untuk pernyataan if di Bash. Tentu saja, bagian else adalah opsional - tetapi diperlukan untuk logika kami dalam hal ini.
  • if COMMAND-RETURN-VALUE; then... - if akan dijalankan jika nilai kembalian dari perintah adalah nol. Ya, logika dalam Bash adalah nol berdasarkan, yang berarti bahwa perintah yang dijalankan berhasil keluar dengan kode 0. Jika ada yang salah, di sisi lain, bilangan bulat positif akan dikembalikan. Untuk menyederhanakan hal-hal: apa pun selain 0 dianggap false.
  • Ekspresi matematika dalam Bash ditentukan oleh tanda kurung ganda.$((number%3)) akan mengembalikan nilai yang tersisa untuk membagi variabel,number, dengan 3. Harap dicatat bahwa kami tidak menggunakan $ dalam kurung - hanya di depan mereka.

Anda mungkin bertanya-tanya di mana perintah ada dalam contoh kita. Bukankah hanya ada braket dengan ekspresi aneh di dalamnya? Nah, ternyata itu [sebenarnya adalah perintah yang bisa dieksekusi. Untuk bermain-main dengan ini, cobalah perintah berikut di konsol Anda.

Tip: Nilai keluar perintah keluar selalu dikembalikan ke variabel,? (tanda tanya). Ditimpa setelah setiap eksekusi perintah baru.


Memeriksa Buzz

Kami melakukannya dengan baik sejauh ini. Kami memiliki "Fizz"; sekarang mari kita lakukan bagian "Buzz".

Di atas, kami telah memperkenalkan kondisi lain untuk dibagi oleh 5: pernyataan elif. Ini, tentu saja, diterjemahkan ke yang lain jika, dan akan dieksekusi jika perintah yang mengikutinya mengembalikan true (atau 0). Seperti yang dapat Anda amati, pernyataan kondisional dalam [] biasanya dievaluasi dengan bantuan parameter, seperti -eq, yang berarti "sama."

Untuk sintaks, arg1 OP arg2, OP adalah salah satu-eq, -ne, -lt, -le, -gt, atau -ge. Operator biner aritmatika ini mengembalikan nilai true jika arg1 sama dengan, tidak sama dengan, kurang dari, kurang dari atau sama dengan, lebih besar dari, atau lebih besar dari atau sama dengan arg2, masing-masing .arg1 dan arg2 dapat berupa bilangan bulat positif atau negatif. - Bash Manual

Ketika Anda mencoba untuk membandingkan string, Anda dapat menggunakan tanda == yang terkenal, atau bahkan satu tanda yang sama akan dilakukan. != mengembalikan nilai true ketika string berbeda.


Tapi Kode itu tidak Cukup Benar

Sejauh ini, kode berjalan, tetapi logikanya tidak benar. Ketika nomor habis dibagi 3 dan 5, logika kami hanya akan menggemakan "Fizz." Mari kita memodifikasi Kode kita untuk memenuhi persyaratan terakhir FizzBuzz.

Sekali lagi, kami harus membuat beberapa perubahan. Yang paling penting adalah pengenalan variabel, dan kemudian gabungan dari "Buzz" untuk itu, jika perlu. String dalam bash biasanya didefinisikan antara tanda kutip ganda ("). Kutipan tunggal dapat digunakan juga, tetapi untuk penggabungan lebih mudah, ganda adalah pilihan yang lebih baik. Dalam tanda kutip ganda ini, Anda bisa mereferensikan variabel: some text $variable some other textakan menggantikan $variabel dengan isinya. Ketika Anda ingin menggabungkan variabel dengan string tanpa spasi di antara mereka, Anda dapat memilih untuk memasukkan nama variabel dalam kurung kurawal. Dalam banyak kasus, seperti PHP, Anda tidak diharuskan untuk melakukannya, tetapi itu sangat membantu ketika menyangkut pembacaan kode.

Kiat: Anda tidak dapat membandingkan string kosong. Itu akan mengembalikan parameter yang hilang.

Karena argumen di dalam [] diperlakukan sebagai parameter, untuk "[", mereka harus berbeda dari string kosong. Jadi ekspresi ini, meskipun logis, akan menghasilkan kesalahan: [$ output! = ""]. Itu sebabnya kami menggunakan [-z $ output], yang mengembalikan true jika string memiliki panjang nol.


Metode Ekstrak untuk Ekspresi Logis

Salah satu cara untuk meningkatkan contoh kita adalah mengekstrak ke dalam fungsi ekspresi matematika dari pernyataan if, seperti:

Kami mengambil ekspresi membandingkan sisanya dengan nol, dan memindahkannya ke fungsi. Terlebih lagi, kami menghilangkan perbandingan dengan nol, karena nol berarti benar bagi kami. Kami hanya harus mengembalikan nilai dari ekspresi matematika - sangat sederhana!

Tip: Definisi fungsi harus mendahului panggilannya.

Di Bash, Anda dapat menetapkan metode sebagai function func_name { commands; }. Opsional, ada sintaks kedua untuk mendeklarasikan funngsi : func_name () {commands; }. Jadi, kita bisa menjatuhkan string, function dan menambahkan "()" setelah namanya. Saya pribadi lebih suka opsi ini, sebagaimana dicontohkan dalam contoh di atas. Ini lebih eksplisit dan menyerupai bahasa pemrograman tradisional.

Anda tidak perlu menentukan parameter untuk fungsi di Bash. Mengirim parameter ke fungsi dilakukan dengan hanya enumerasi atas mereka setelah pemanggilan fungsi dipisahkan oleh spasi putih. Jangan letakkan koma atau tanda kurung pada panggilan fungsi - itu tidak akan berfungsi.

Parameter yang diterima secara otomatis ditetapkan ke variabel berdasarkan nomor. Parameter pertama pergi ke $1, yang kedua ke $2, dan seterusnya. Variabel khusus, $0 mengacu pada nama file skrip saat ini.

Mari Bermain dengan Parameter

Kode ini akan menghasilkan output berikut:

Mari kita analisis sumbernya, baris demi baris.

  • Baris terakhir adalah panggilan fungsi. Kami menyebutnya dengan tiga parameter string.
  • Baris pertama setelah shebang adalah definisi fungsi.
  • Baris pertama dalam fungsi menghasilkan parameter pertama: "satu". Sejauh ini sangat sederhana.
  • Baris kedua menghasilkan nama file skrip saat ini. Sekali lagi, sangat sederhana.
  • Baris ketiga mengubah pemisah karakter default ke huruf, "X". Secara default, ini adalah "" (spasi). Begitulah cara Bash tahu bagaimana parameter dipisahkan.
  • Baris keempat menghasilkan variabel khusus, $@. Ini mewakili semua parameter sebagai satu kata, persis seperti yang ditentukan dalam panggilan fungsi.
  • Baris terakhir menghasilkan variabel khusus lainnya, $*. Ini mewakili semua parameter, diambil satu per satu dan digabung dengan huruf pertama dari variabel IFS. Itu sebabnya hasilnya adalah oneXtwoXthre.

Mengembalikan String Dari Fungsi

Seperti yang saya catat sebelumnya, fungsi dalam Bash hanya dapat mengembalikan bilangan bulat. Dengan demikian, menulis return "a string" akan menjadi kode tidak valid. Namun, dalam banyak situasi, Anda membutuhkan lebih dari sekadar nol atau satu. Kita dapat mem-refactor contoh FizzBuzz kita sehingga, dalam pernyataan for, kita hanya akan membuat panggilan fungsi.

Nah, ini adalah langkah pertama. Kami hanya mengekstrak semua kode ke dalam fungsi, yang disebut fizzOrBuzz, dan kemudian mengganti $number dengan $1. Namun, semua keluaran terjadi di fungsi fizzOrBuzz. Kami ingin menampilkan dari loop for dengan pernyataan echo, sehingga kami dapat menambahkan setiap baris dengan string lain. Kita harus menangkap output fungsi fizzOrBuzz.

Kami telah memperbarui for pengulangan hanya sedikit (tidak ada perubahan lain). Kami sekarang telah menggemakan semuanya dua kali dalam dua cara berbeda untuk memberikan contoh perbedaan antara dua solusi untuk masalah yang sama.

Solusi pertama untuk menangkap output dari fungsi atau perintah lain adalah menggunakan backticks. Dalam 99% kasus, ini akan bekerja dengan baik. Anda cukup mereferensikan variabel dalam backticks dengan nama mereka, seperti yang kami lakukan dengan $number. Beberapa baris pertama dari output seharusnya sekarang terlihat seperti:

Seperti yang Anda lihat, semuanya diduplikasi. Output yang sama.

Untuk solusi kedua, kami memilih untuk terlebih dahulu menetapkan nilai kembalian ke variabel. Dalam penugasan itu, kami menggunakan $(), yang, dalam hal ini, garpu skrip, mengeksekusi kode, dan mengembalikan outputnya.


& semi ;, && dan ||

Apakah Anda ingat bahwa kami menggunakan titik koma di sana-sini? Mereka dapat digunakan untuk mengeksekusi beberapa perintah yang ditulis pada baris yang sama. Jika Anda memisahkannya dengan titik koma, mereka hanya akan dieksekusi.

Kasus yang lebih canggih adalah menggunakan && antara dua perintah. Ya, itu AND yang logis; itu berarti bahwa perintah kedua akan dijalankan hanya jika yang pertama mengembalikan nilai true (ia keluar dengan 0). Ini sangat membantu; kita dapat menyederhanakan pernyataan if ke dalam singkatan ini:

Sebagai fungsi kami, isDivisibleBy mengembalikan nilai pengembalian yang tepat, kemudian kami dapat menggunakan && untuk mengatur variabel yang kami inginkan. Apa setelah && akan dieksekusi hanya jika kondisinya true. Dengan cara yang sama, kita bisa menggunakan || (karakter pipa ganda) sebagai OR logis. Berikut contoh singkat di bawah ini.


Pikiran Akhir

Jadi itu untuk tutorial ini! Saya harap Anda telah mengambil beberapa kiat dan teknik baru untuk menulis skrip Bash Anda sendiri. Terima kasih telah membaca, dan ikuti terus artikel yang lebih canggih tentang hal ini.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.