Bash:
การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ
วิธีการ:
#!/bin/bash
# พิมพ์ชื่อของสคริปต์
echo "ชื่อสคริปต์: $0"
# พิมพ์อาร์กิวเมนต์แรก
echo "อาร์กิวเมนต์แรก: $1"
# พิมพ์อาร์กิวเมนต์ทั้งหมด
echo "อาร์กิวเมนต์ทั้งหมด: $@"
ตัวอย่างผลลัพธ์สมมุติว่าคุณตั้งชื่อสคริปต์ของคุณว่า ’example.sh’ และคุณเรียกใช้ ./example.sh arg1 arg2
:
ชื่อสคริปต์: ./example.sh
อาร์กิวเมนต์แรก: arg1
อาร์กิวเมนต์ทั้งหมด: arg1 arg2
วนลูปผ่านอาร์กิวเมนต์:
#!/bin/bash
# วนลูปผ่านอาร์กิวเมนต์แต่ละอัน
for arg in "$@"; do
echo "อาร์กิวเมนต์: $arg"
done
ตรวจสอบลึกลงไป
Bash รองรับอาร์กิวเมนต์บรรทัดคำสั่งมานานแล้ว; พวกเขาเป็นพารามิเตอร์ตามตำแหน่ง, $0
ถึง $9
, โดย $@
และ $*
แสดงอาร์กิวเมนต์ทั้งหมด $0
เป็นสคริปต์นั้นเอง, $1
ถึง $9
คืออาร์กิวเมนต์ลำดับแรกถึงลำดับที่เก้า; ต้องใช้วงเล็บเช่น ${10}
เมื่อต้องการเริ่มตั้งแต่ลำดับที่สิบเป็นต้นไป
การใช้ $@
มักจะดีกว่า $*
เนื่องจากมันจัดการอาร์กิวเมนต์ที่มีช่องว่างได้อย่างถูกต้อง $@
ให้แต่ละอาร์กิวเมนต์เป็น “คำ” แยกกัน; $*
รวมมันทั้งหมดเป็น “คำ” เดียว
คุณสามารถเลื่อนผ่านอาร์กิวเมนต์ได้โดยใช้คำสั่ง shift
, ซึ่งจะเปลี่ยน $2
เป็น $1
, และต่อไปเรื่อยๆ ทิ้ง $1
เก่า
มีทางเลือกอื่นหรือเปล่า? แน่นอน. getopts
และ getopt
ให้การควบคุมที่ดีกว่าสำหรับตัวเลือก (เช่น -h สำหรับความช่วยเหลือ) และการแยกสัญญาณการประมวลผล; ตรวจสอบสิ่งเหล่านี้หาก $1
, $2
,… ไม่ตอบโจทย์
ดูเพิ่มเติม
- คู่มือ Bash เกี่ยวกับพารามิเตอร์พิเศษ: https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html
- คู่มือการเขียนสคริปต์ Bash ขั้นสูง: https://www.tldp.org/LDP/abs/html/
- บทแนะนำ
getopts
: https://wiki.bash-hackers.org/howto/getopts_tutorial