ฉันสับสนวิธีรวมอาร์กิวเมนต์ / แฟล็กเผื่อเลือกเมื่อเขียนสคริปต์ทุบตีสำหรับโปรแกรมต่อไปนี้:
โปรแกรมต้องการสองอาร์กิวเมนต์:
run_program --flag1 <value> --flag2 <value>
อย่างไรก็ตามมีแฟล็กเผื่อเลือกหลายรายการ:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
ฉันต้องการเรียกใช้สคริปต์ทุบตีเพื่อให้ได้อาร์กิวเมนต์ของผู้ใช้ หากผู้ใช้ป้อนเพียงสองอาร์กิวเมนต์ตามลำดับก็จะเป็น:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
แต่จะเกิดอะไรขึ้นถ้ามีอาร์กิวเมนต์ตัวเลือกใด ๆ รวมอยู่ด้วย? ฉันคิดว่ามันจะเป็น
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
แต่ถ้าหากได้รับ $ 4 แต่ไม่ใช่ $ 3 ล่ะ
getopts
ฉันจะต้องระบุชุดค่าผสมแต่ละอาร์กิวเมนต์หรือไม่ 3 & 4, 3 & 5, 3 & 4 & 5 ฯลฯ ?
getopts
แต่ฉันยังคงไม่เข้าใจ สมมติว่าผมบังคับให้ผู้ใช้เรียกใช้สคริปต์ที่มีการขัดแย้งทั้งหมด: ซึ่งไหลโปรแกรมเป็นrun_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
program --flag1 VAL --flag2 VAL
ถ้าคุณวิ่งโปรแกรมจะทำงานเป็นrun_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
program --flag1 VAL --flag2 VAL --optflag2 10
คุณจะมีพฤติกรรมเช่นนี้ได้getopts
อย่างไร
getopts
คือสิ่งที่คุณต้องการ หากไม่มีสิ่งนั้นคุณสามารถใช้การวนซ้ำพร้อมกับคำสั่งสวิตช์เพื่อตรวจจับการตั้งค่าสถานะแต่ละตัวเลือกหรือไม่ก็ได้