Saya bingung bagaimana memasukkan argumen / bendera opsional saat menulis skrip bash untuk program berikut:
Program ini membutuhkan dua argumen:
run_program --flag1 <value> --flag2 <value>
Namun, ada beberapa flag opsional:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
Saya ingin menjalankan skrip bash sehingga dibutuhkan argumen pengguna. Jika pengguna hanya memasukkan dua argumen secara berurutan, maka itu akan menjadi:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
Tetapi bagaimana jika ada argumen opsional yang disertakan? Saya akan berpikir itu akan terjadi
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
Tetapi bagaimana jika $ 4 diberikan tetapi bukan $ 3?
getopts
, saya perlu menentukan setiap kombinasi argumen? 3 & 4, 3 & 5, 3 & 4 & 5, dll?
getopts
. Katakanlah saya memaksa pengguna untuk menjalankan skrip dengan semua argumen: run_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
yang menjalankan program sebagai program --flag1 VAL --flag2 VAL
. Jika Anda berlari run_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
, program akan berjalan sebagai program --flag1 VAL --flag2 VAL --optflag2 10
. Bagaimana Anda bisa mendapatkan perilaku seperti itu getopts
?
getopts
adalah apa yang kamu inginkan. Tanpa itu, Anda bisa menggunakan loop dengan pernyataan switch untuk mendeteksi setiap flag, opsional atau tidak.