0Pricing
Linux Command Line & Bash Scripting Mastery · บทเรียน

อาร์กิวเมนต์และตัวเลือกของสคริปต์ ($@, $#, getopts)

เรียนรู้การส่งอาร์กิวเมนต์ให้สคริปต์และวิเคราะห์ตัวเลือกบรรทัดคำสั่งโดยใช้ตัวแปรพิเศษและ 'getopts'

อาร์กิวเมนต์และตัวเลือกของสคริปต์ ($@, $#, getopts) เป็นบทเรียน Linux Command Line & Bash Scripting Mastery ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Linux Command Line & Bash Scripting Mastery และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน

อาร์กิวเมนต์ของสคริปต์: เหตุใดจึงต้องใช้

คุณเคยใช้คำสั่งอย่าง ls -l หรือ cp file1 file2 หรือไม่ -l, file1 และ file2 ล้วนเป็นอาร์กิวเมนต์ทั้งสิ้น อาร์กิวเมนต์จะบอกคำสั่งว่าต้องทำอะไรหรือดำเนินการกับสิ่งใด

ในการเขียนสคริปต์ Bash อาร์กิวเมนต์ช่วยให้สคริปต์ยืดหยุ่น แทนที่จะกำหนดค่าไว้ตายตัว สคริปต์สามารถรับข้อมูลนำเข้าโดยตรงจากบรรทัดคำสั่งขณะเรียกใช้

การเข้าถึงอาร์กิวเมนต์ตามตำแหน่ง

เมื่อคุณเรียกใช้สคริปต์พร้อมอาร์กิวเมนต์ Bash จะกำหนดอาร์กิวเมนต์เหล่านั้นให้กับตัวแปรพิเศษที่เรียกว่า พารามิเตอร์ตามตำแหน่ง โดยอัตโนมัติ

  • อาร์กิวเมนต์แรกคือ $1
  • อาร์กิวเมนต์ที่สองคือ $2
  • และต่อไปเรื่อย ๆ จนถึง $9

สำหรับอาร์กิวเมนต์ที่เกิน 9 ให้ใช้วงเล็บปีกกา เช่น ${10}, ${11} เป็นต้น ตัวแปรเหล่านี้เก็บค่าที่ส่งให้สคริปต์

สาธิต: อาร์กิวเมนต์ตามตำแหน่ง

มาดูวิธีเข้าถึงอาร์กิวเมนต์เหล่านี้ในสคริปต์กัน บันทึกสคริปต์นี้เป็น greet.sh แล้วเรียกใช้ด้วย ./greet.sh Alice Bob

#!/bin/bash

echo "Hello, $1!"
echo "Welcome, $2."
echo "The third argument (if any) is: $3"

`$0` และ `$#`: ข้อมูลสคริปต์

Bash มีตัวแปรพิเศษเพิ่มเติมอีกสองสามตัวที่ให้ข้อมูลเกี่ยวกับตัวสคริปต์และอาร์กิวเมนต์ของสคริปต์:

  • $0: เก็บชื่อของสคริปต์ที่กำลังทำงาน มีประโยชน์สำหรับข้อความแสดงข้อผิดพลาดหรือการบันทึกการทำงาน
  • $#: เก็บจำนวนอาร์กิวเมนต์ตามตำแหน่งทั้งหมดที่ส่งให้สคริปต์

ตัวแปรเหล่านี้ช่วยให้สคริปต์มีความทนทานและใช้งานง่ายยิ่งขึ้น

สาธิต: `$0` และ `$#`

เรียกใช้สคริปต์นี้ด้วยจำนวนอาร์กิวเมนต์ที่แตกต่างกัน เช่น ./info.sh one two three หรือเรียกใช้เพียง ./info.sh

#!/bin/bash

echo "Script name: $0"
echo "Number of arguments received: $#"

`$@` เทียบกับ `$*`: อาร์กิวเมนต์ทั้งหมด

บางครั้งคุณจำเป็นต้องอ้างถึงอาร์กิวเมนต์ทั้งหมดพร้อมกัน Bash มีสองวิธีดังนี้:

  • $@: ขยายเป็นอาร์กิวเมนต์แยกกัน เมื่อใส่เครื่องหมายอัญประกาศคู่ ("$@") อาร์กิวเมนต์แต่ละรายการจะยังคงเป็นคำแยกกัน แม้จะมีช่องว่างอยู่ภายใน โดยทั่วไปวิธีนี้เหมาะสำหรับลูปมากกว่า
  • $*: ขยายเป็นสตริงเดียวที่รวมอาร์กิวเมนต์ทั้งหมด เมื่อใส่เครื่องหมายอัญประกาศคู่ ("$*") อาร์กิวเมนต์ทั้งหมดจะถูกรวมเป็นคำเดียว โดยคั่นด้วยอักขระตัวแรกของ IFS (ตัวคั่นฟิลด์ภายใน ซึ่งโดยทั่วไปคือช่องว่าง)

เมื่อวนซ้ำผ่านอาร์กิวเมนต์ ให้ใช้ "$@" เสมอเพื่อคงช่องว่างไว้!

สาธิต: การวนซ้ำด้วย `"$@"`

สคริปต์นี้สาธิตวิธีที่ "$@" จัดการอาร์กิวเมนต์ที่มีช่องว่างได้อย่างถูกต้อง เรียกใช้ในลักษณะนี้: ./loop_args.sh hello "world wide" web

#!/bin/bash

echo "Processing arguments with \"$@\":"
for arg in "$@"; do
  echo "  Argument: [$arg]"
done

echo "\nProcessing arguments with \"$*\":"
for arg in "$*"; do
  echo "  Argument: [$arg]"
done

ตัวเลือก: เหนือกว่าอาร์กิวเมนต์ตามตำแหน่ง

อาร์กิวเมนต์ตามตำแหน่งเหมาะสำหรับกรณีง่าย ๆ แต่หากสคริปต์ต้องการธงตัวเลือกหรือพารามิเตอร์ที่มีชื่อ เช่น -v สำหรับโหมดละเอียด หรือ -f filename จะทำอย่างไร

นี่คือจุดที่ตัวเลือกบรรทัดคำสั่งเข้ามาช่วย ตัวเลือกเหล่านี้ทำให้สคริปต์ยืดหยุ่นและใช้งานง่ายขึ้น โดยผู้ใช้สามารถระบุการตั้งค่าในลำดับใดก็ได้

Bash มีคำสั่ง getopts สำหรับแยกวิเคราะห์ตัวเลือกประเภทนี้โดยเฉพาะ

ไวยากรณ์ `getopts`: `optstring`

ไวยากรณ์พื้นฐานของ getopts คือ: getopts optstring variable

  • optstring: สตริงของอักขระตัวเลือกที่ถูกต้อง หากตัวเลือกต้องการอาร์กิวเมนต์ เช่น -f filename ให้ใส่เครื่องหมายทวิภาคต่อท้ายอักขระนั้น เช่น f:
  • variable: ชื่อตัวแปรที่ getopts จะใช้เก็บอักขระตัวเลือกที่กำลังประมวลผล เช่น opt

getopts ยังกำหนดค่า OPTARG สำหรับอาร์กิวเมนต์ของตัวเลือก และ OPTIND สำหรับดัชนีของอาร์กิวเมนต์ถัดไปด้วย

สาธิต: `getopts` พื้นฐาน

สคริปต์นี้ประมวลผลตัวเลือก -v (โหมดละเอียด) และ -f (ไฟล์) ลองเรียกใช้ด้วยคำสั่ง ./options.sh -v -f mydata.txt -x หรือ ./options.sh -vf mydata.txt

#!/bin/bash

while getopts "vf:" opt; do
  case $opt in
    v)
      echo "Verbose mode enabled."
      ;;
    f)
      echo "File specified: $OPTARG"
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

ตรวจสอบอย่างรวดเร็ว: ตัวแปรอาร์กิวเมนต์

พิจารณาสคริปต์ต่อไปนี้และวิธีเรียกใช้:

#!/bin/bash
echo "Script: $0"
echo "Count: $#"
for arg in "$@"; do
  echo "Arg: $arg"
done

หากคุณเรียกใช้ด้วย: ./myscript.sh "Hello World" 123

ผลลัพธ์จะเป็นอย่างไร

ทบทวน: อาร์กิวเมนต์และตัวเลือก

ทำได้ดีมาก! คุณได้เรียนรู้วิธีทำให้สคริปต์ Bash มีความยืดหยุ่นมากขึ้นแล้ว:

  • อาร์กิวเมนต์ตามตำแหน่ง: ใช้ $1, $2 เป็นต้น เพื่อเข้าถึงอาร์กิวเมนต์โดยตรง
  • ตัวแปรพิเศษ: ใช้ $0 สำหรับชื่อสคริปต์ $# สำหรับจำนวนอาร์กิวเมนต์ และ "$@" เพื่อวนซ้ำผ่านอาร์กิวเมนต์ทั้งหมดอย่างปลอดภัย
  • ตัวเลือกบรรทัดคำสั่ง: ใช้ getopts เพื่อแยกวิเคราะห์ตัวเลือกที่มีชื่อ เช่น -v และอาร์กิวเมนต์ของตัวเลือก เช่น -f filename ทำให้สคริปต์มีความทนทานและใช้งานง่ายยิ่งขึ้น

ฝึกใช้สิ่งเหล่านี้ในสคริปต์ของคุณเอง เพื่อสร้างเครื่องมือบรรทัดคำสั่งที่มีประสิทธิภาพและยืดหยุ่น!

คำถามที่พบบ่อย

บทเรียน “อาร์กิวเมนต์และตัวเลือกของสคริปต์ ($@, $#, getopts)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “อาร์กิวเมนต์และตัวเลือกของสคริปต์ ($@, $#, getopts)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Linux Command Line & Bash Scripting Mastery ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “อาร์กิวเมนต์และตัวเลือกของสคริปต์ ($@, $#, getopts)”

เรียนรู้การส่งอาร์กิวเมนต์ให้สคริปต์และวิเคราะห์ตัวเลือกบรรทัดคำสั่งโดยใช้ตัวแปรพิเศษและ 'getopts' คุณปฏิบัติ Linux Command Line & Bash Scripting Mastery ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Linux Command Line & Bash Scripting Mastery หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Linux Command Line & Bash Scripting Mastery บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “อาร์กิวเมนต์และตัวเลือกของสคริปต์ ($@, $#, getopts)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Linux Command Line & Bash Scripting Mastery นี้ได้ไหม

ได้ บทเรียน Linux Command Line & Bash Scripting Mastery ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โครงสร้างการวนซ้ำ (for, while)
  2. ฟังก์ชันในสคริปต์ Bash
  3. อาร์กิวเมนต์และตัวเลือกของสคริปต์ ($@, $#, getopts)
  4. คำสั่ง case และการจับคู่รูปแบบ
← กลับไปที่ Linux Command Line & Bash Scripting Mastery