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 FALSEyang 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?
getoptsadalah apa yang kamu inginkan. Tanpa itu, Anda bisa menggunakan loop dengan pernyataan switch untuk mendeteksi setiap flag, opsional atau tidak.