Apakah ada beberapa alat bawaan yang akan mengenali -x
dan --xxxx
sebagai saklar, dan bukan argumen, atau apakah Anda harus melalui semua variabel input, menguji tanda hubung, dan kemudian menguraikan argumen setelahnya?
shell
shell-script
options
getopts
pengguna394
sumber
sumber
getopt
harus selalu diverifikasi sebagai GNU getopt sebelum Anda menggunakannya, tetapi Anda tidak boleh menggunakannya karenagetopts
lebih portabel (dan umumnya lebih baik). Jika Anda lakukan perlu menyebutnya untuk beberapa alasan, menyebutnya dengan cara GNU khusus, dan memastikan bahwaGETOPT_COMPATIBLE
tidak dalam lingkungan.while getopts "ab:" opt
?:
setelah yang menandakan itu membutuhkan argumen. A:
sebagai karakter pertama berarti untuk menekan pesan kesalahan.Saya menganggap Anda menggunakan bash atau serupa. Sebuah contoh:
sumber
+=
dengan array. Tidak tahu kamu bisa melakukan itu. Bagus!Anda harus menulis siklus untuk mem-parsing parameter. Memang Anda bisa menggunakan
getopts
perintah untuk melakukannya dengan mudah.Ini adalah contoh sederhana dari
getopts
halaman manual:sumber
Saya menulis skrip baru-baru ini untuk pekerjaan yang fleksibel dan memungkinkan untuk beberapa jenis switch dalam urutan apa pun. Saya tidak dapat mengungkapkan skrip lengkap untuk alasan hukum yang jelas (belum lagi saya tidak memilikinya bersama saya saat ini), tetapi inilah dagingnya .. Anda dapat memasukkannya ke dalam subrutin dan menyebutnya di akhir naskah Anda:
Saya sarankan membatasi skrip bash Anda menjadi kurang dari 400 baris / 15k karakter; skrip saya yang tadi tumbuh melebihi ukuran ini dan menjadi sangat sulit untuk dikerjakan. Saya mulai menulis ulang di Perl, yang jauh lebih cocok untuk tugas itu. Ingatlah hal itu saat Anda mengerjakan skrip Anda di bash. Bash bagus untuk skrip dan oneliner kecil, tetapi ada yang lebih kompleks dan Anda lebih baik menulisnya di Perl.
Catatan, saya belum menguji di atas, jadi mungkin tidak berhasil, tetapi Anda mendapatkan ide umum dari itu.
sumber
options
pada akhirnya tidak benar, itu akan kembali-bash: syntax error near unexpected token $@
. Sebut saja sebagaioptions "$@"
.while
kondisi seharusnya tidak(($#))
bukan?$#
? Sunting: Anda benar. Memperbaikinya kewhile (( "$#" ))