คำถามติดแท็ก getopts

30
ฉันจะแยกอาร์กิวเมนต์บรรทัดคำสั่งใน Bash ได้อย่างไร
บอกฉันว่าฉันมีสคริปต์ที่ถูกเรียกด้วยบรรทัดนี้: ./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile หรืออันนี้: ./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile เป็นวิธีที่ได้รับการยอมรับของการแยกเช่นนี้ว่าในแต่ละกรณี (หรือการรวมกันของทั้งสองบางคน) $v, $fและ $dทั้งหมดจะถูกตั้งค่าtrueและ$outFileจะเท่ากับ/fizz/someOtherFile?

30
การใช้ getopts เพื่อประมวลผลตัวเลือกบรรทัดคำสั่งแบบยาวและแบบสั้น
ฉันต้องการที่จะเรียกใช้ตัวเลือกบรรทัดคำสั่งแบบยาวและสั้นโดยใช้เชลล์สคริปต์ของฉัน ฉันรู้ว่าgetoptsสามารถใช้ได้ แต่เหมือนใน Perl ฉันไม่สามารถทำเช่นเดียวกันกับเชลล์ได้ ความคิดเห็นใด ๆ เกี่ยวกับวิธีการทำสิ่งนี้เพื่อให้ฉันสามารถใช้ตัวเลือกเช่น: ./shell.sh --copyfile abc.pl /tmp/ ./shell.sh -c abc.pl /tmp/ ในข้างต้นคำสั่งทั้งสองมีความหมายเหมือนกับเชลล์ของฉัน แต่การใช้getoptsฉันไม่สามารถใช้สิ่งเหล่านี้ได้หรือไม่

7
ตัวอย่างของวิธีใช้ getopts ใน bash
ฉันต้องการโทรหาmyscriptไฟล์ด้วยวิธีนี้: $ ./myscript -s 45 -p any_string หรือ $ ./myscript -h #should display help $ ./myscript #should display help ความต้องการของฉันคือ: getopt ที่นี่เพื่อรับอาร์กิวเมนต์อินพุต ตรวจสอบว่า-sมีอยู่หากไม่ส่งคืนข้อผิดพลาด ตรวจสอบว่าค่าหลังจากนั้น-sคือ 45 หรือ 90 ตรวจสอบว่า-pมีอยู่และมีสตริงอินพุตหลังจาก หากผู้ใช้เข้าสู่./myscript -hหรือเพียง./myscriptแสดงความช่วยเหลือ ฉันพยายามจนถึงรหัสนี้: #!/bin/bash while getopts "h:s:" arg; do case $arg in h) echo "usage" ;; s) strength=$OPTARG echo $strength ;; esac …
345 bash  shell  getopts 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.