Cara Meloloskan Argumen ke Bash-Script

Perintah, sintaks dan contoh

Anda dapat menulis skrip bash sedemikian rupa sehingga menerima argumen yang ditentukan ketika skrip dipanggil dari baris perintah. Metode ini digunakan ketika skrip harus melakukan fungsi yang sedikit berbeda tergantung pada nilai parameter input (argumen).

Misalnya, Anda mungkin memiliki skrip yang disebut "stats.sh" yang melakukan operasi tertentu pada file, seperti menghitung kata-katanya. Jika Anda ingin dapat menggunakan skrip itu di banyak file, sebaiknya berikan nama file sebagai argumen, sehingga Anda dapat menggunakan skrip yang sama untuk semua file yang akan diproses. Misalnya, jika nama file yang akan diproses adalah "daftar lagu", Anda akan memasukkan baris perintah berikut:

daftar lagu sh stats.sh

Argumen diakses di dalam skrip menggunakan variabel $ 1, $ 2, $ 3, dll, di mana $ 1 mengacu pada argumen pertama, $ 2 ke argumen kedua, dan seterusnya. Ini diilustrasikan dalam contoh berikut:

FILE1 = $ 1 wc $ FILE1

Untuk keterbacaan, tetapkan variabel dengan nama deskriptif ke nilai argumen pertama ($ 1), dan kemudian panggil utilitas jumlah kata ( wc ) pada variabel ini ($ FILE1).

Jika Anda memiliki sejumlah variabel argumen, Anda dapat menggunakan variabel "$ @", yang merupakan larik dari semua parameter masukan. Ini berarti Anda dapat menggunakan for-loop untuk mengulanginya secara berulang-ulang, seperti yang diilustrasikan dalam contoh berikut:

untuk FILE1 dalam "$ @" lakukan wc $ FILE1 selesai

Berikut ini contoh cara memanggil skrip ini dengan argumen dari baris perintah:

sh stats.sh songlist1 songlist2 songlist3

Jika argumen memiliki spasi, Anda perlu melampirkannya dengan tanda kutip tunggal. Sebagai contoh:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Seringkali naskah ditulis sedemikian rupa sehingga pengguna dapat menyampaikan argumen dalam urutan apa pun menggunakan bendera. Dengan metode bendera, Anda juga dapat membuat beberapa argumen opsional.

Katakanlah Anda memiliki skrip yang mengambil informasi dari database berdasarkan parameter yang ditentukan, seperti "nama pengguna", "tanggal", dan "produk", dan menghasilkan laporan dalam "format" yang ditentukan. Sekarang Anda ingin menulis skrip Anda sehingga Anda dapat meneruskan parameter ini ketika skrip dipanggil. Mungkin terlihat seperti ini:

makereport -u jsmith -p notebook -d 10-20-2011 -f pdf

Bash memungkinkan fungsi ini dengan fungsi "getop". Untuk contoh di atas, Anda bisa menggunakan getopts sebagai berikut:

Ini adalah while-loop yang menggunakan fungsi "getopts" dan apa yang disebut "optstring", dalam hal ini "u: d: p: f:", untuk mengulang melalui argumen. The while-loop berjalan melalui tali pusat, yang berisi bendera yang dapat digunakan untuk melewati argumen, dan memberikan nilai argumen yang disediakan untuk bendera itu ke variabel "opsi". Pernyataan-kasus kemudian memberikan nilai variabel "opsi" ke variabel global yang dapat digunakan setelah semua argumen telah dibaca.

Titik dua dalam tali pusat berarti bahwa nilai-nilai diperlukan untuk bendera yang sesuai. Dalam contoh di atas semua bendera diikuti oleh titik dua: "u: d: p: f:". Ini berarti, semua bendera membutuhkan nilai. Jika, misalnya, bendera "d" dan "f" tidak diharapkan memiliki nilai, tali pusat akan menjadi "u: dp: f".

Tanda titik dua di awal tali pusat, misalnya ": u: d: p: f:", memiliki arti yang sama sekali berbeda. Ini memungkinkan Anda untuk menangani bendera yang tidak diwakili dalam tali pusat. Dalam hal ini, nilai variabel "option" diatur ke "?" dan nilai "OPTARG" diatur ke bendera yang tidak diharapkan. Memungkinkan Anda untuk menampilkan pesan kesalahan yang sesuai yang memberi tahu pengguna tentang kesalahan tersebut.

Argumen yang tidak didahului oleh bendera diabaikan oleh getop. Jika flag yang ditentukan dalam optstring tidak disediakan ketika skrip dipanggil, tidak ada yang terjadi, kecuali Anda menangani case ini secara khusus dalam kode Anda. Setiap argumen yang tidak ditangani oleh getop masih dapat ditangkap dengan variabel $ 1, $ 2, dll.