ฉันจะส่งอาร์กิวเมนต์ใน Bash Script ได้อย่างไร

How Do I Pass Argument Bash Script



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

ผ่านอาร์กิวเมนต์โดยใช้ตัวแปรเริ่มต้น:

สร้างไฟล์ใหม่ด้วยชื่อใดก็ได้โดยใช้คำสั่งสัมผัส เช่น file.sh







$สัมผัสชื่อไฟล์



เปิดไฟล์ที่สร้างขึ้นใหม่นี้และเพิ่มสคริปต์ทุบตีลงไป ฉันได้เพิ่มตัวแปรเริ่มต้นบางตัวเช่น $1, $2 และ $3 ตามลำดับ อาร์กิวเมนต์ใดก็ตามที่ถูกส่งผ่านเทอร์มินัลจะถูกเก็บไว้ในตัวแปรที่ระบุ







คุณต้องเรียกใช้ไฟล์นี้โดยใช้คำสั่ง ./ ตามด้วยอาร์กิวเมนต์บางตัว ดังที่คุณเห็นในภาพว่าเมื่อฉันส่งผ่านอาร์กิวเมนต์ มีข้อผิดพลาดเกิดขึ้น: การอนุญาตถูกปฏิเสธ เนื่องจากไฟล์นี้ไม่มีสิทธิ์ดำเนินการ

$./ชื่อไฟล์อาร์กิวเมนต์1อาร์กิวเมนต์2อาร์กิวเมนต์

ดังนั้นเพื่อให้สิทธิ์ในการดำเนินการกับไฟล์นี้ ให้ใช้คำสั่ง sudo chmod เพื่อดำเนินการดังกล่าว



$sudo chmod+x ชื่อไฟล์

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

การส่งชื่อเชลล์สคริปต์เป็นอาร์กิวเมนต์:

ตอนนี้ใช้ file.sh ไฟล์เดิมโดยมีการเปลี่ยนแปลงเล็กน้อยในตัวแปรเริ่มต้น คุณต้องเพิ่มตัวแปร $0 ในสคริปต์ดังที่แสดง

ในการรันคำสั่ง ./ shell script เดียวกัน ชื่อของเชลล์สคริปต์ของคุณ เช่น ./filename จะถูกเก็บไว้ในตัวแปร $0 เป็นอาร์กิวเมนต์

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

เริ่มต้นด้วยไฟล์เดียวกัน file.sh คุณต้องเพิ่มบรรทัดพิเศษในสคริปต์เก่า ประกาศตัวแปรชื่ออาร์เรย์ เพิ่มตัวแปรเริ่มต้น [ป้องกันอีเมล] ซึ่งจะเก็บอาร์กิวเมนต์ที่ผู้ใช้ป้อนเป็นอาร์เรย์ อาร์กิวเมนต์เหล่านี้จะถูกแยกวิเคราะห์ไปยังอาร์เรย์ตัวแปร บรรทัดสุดท้ายจะแสดงอาร์กิวเมนต์ทั้งหมดของอาร์เรย์ตัวแปรที่จัดเรียงตามหมายเลขดัชนี

ดำเนินการ ./ เชลล์สคริปต์ คุณจะเห็นว่าจะแสดงอาร์กิวเมนต์หรือค่าที่จัดเก็บเป็นอาร์เรย์ใน [email protected] แยกวิเคราะห์ไปยังอาร์เรย์ตัวแปร แต่ไม่ใช่ชื่อเชลล์สคริปต์ในคำสั่ง echo ที่สอง คุณจะได้ผลลัพธ์ดังต่อไปนี้

$./ชื่อไฟล์อาร์กิวเมนต์1อาร์กิวเมนต์2อาร์กิวเมนต์

ใช้ไฟล์เดียวกันกับสคริปต์เดียวกัน เพียงลบ ${array[3]} ออกจากบรรทัดสุดท้ายตามที่เห็นในภาพ

หลังจากรันคำสั่ง ./ คุณจะเห็นผลลัพธ์ที่คล้ายกันดังที่คุณได้รับในตัวอย่างด้านบนโดยไม่มีการเปลี่ยนแปลง

คุณยังสามารถได้ผลลัพธ์เดียวกันโดยแทนที่บรรทัดสุดท้ายของสคริปต์ทุบตีด้วยคำเดียว คุณเพียงแค่ต้องเพิ่ม [email protected] ในคำสั่ง echo และจะแสดงอาร์กิวเมนต์ที่มีอยู่ในอาร์เรย์ตัวแปรนี้

ดังนั้นการรันคำสั่ง ./ อีกครั้ง คุณจะได้ผลลัพธ์เหมือนเดิม

ตรวจสอบจำนวนอาร์กิวเมนต์ที่ผ่านทั้งหมด:

ในทางตรงกันข้าม หากคุณต้องการทราบจำนวนอาร์กิวเมนต์ทั้งหมดที่ผู้ใช้ส่งผ่าน คุณก็สามารถทำได้เช่นกัน เพื่อจุดประสงค์นี้ คุณเพียงแค่ต้องแทนที่ [email protected] ด้วย $# ใน echo

ดำเนินการคำสั่ง ./ อีกครั้ง ตอนนี้คุณจะเห็นอาร์กิวเมนต์ทั้งหมดที่ส่งผ่านไปยังสคริปต์ ในกรณีของเรา มีการส่งอาร์กิวเมนต์ 3 รายการเป็นค่า

สร้างบรรทัดต่อบรรทัดของอาร์กิวเมนต์:

สร้างไฟล์ใหม่ test.sh ในโฮมไดเร็กทอรี เพิ่มสคริปต์ทุบตีตามที่แสดง

ตอนนี้ให้รันคำสั่งเดิมที่มีอาร์กิวเมนต์ต่างกัน ประการแรก คุณจะเห็นข้อผิดพลาด: การอนุญาตถูกปฏิเสธ

คุณต้องรันคำสั่ง chmod เพื่อให้สิทธิ์ sudo ของไฟล์นี้ หลังจากนั้นให้รันคำสั่ง ./ shell script อีกครั้ง และคุณจะได้ผลลัพธ์ที่เรียงลำดับทีละบรรทัดของอาร์กิวเมนต์

จำกัด ตัวแปรผ่านหมายเลขดัชนีอาร์กิวเมนต์:

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

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

แต่เมื่อคุณส่งผ่านจำนวนอาร์กิวเมนต์ที่เท่ากันหรือมากกว่าในคำสั่ง คุณจะได้รับค่าที่แสดงในผลลัพธ์ดังที่แสดง

การตรวจสอบอาร์กิวเมนต์ค่าเฉพาะ:

สร้างไฟล์ใหม่ด้วยชื่อ Check.sh ในโฮมไดเร็กทอรีของคุณ เพิ่มสคริปต์ทุบตีเดียวกันกับที่แสดงในภาพด้านล่าง ในสคริปต์นี้ เรามีตัวแปร var เพื่อเก็บค่าอาร์กิวเมนต์ที่ส่งผ่านโดยผู้ใช้ จากนั้นเราก็มีคำสั่ง if ซึ่งจะตรวจสอบค่าอาร์กิวเมนต์ว่าตรงกันหรือไม่ หากค่าอาร์กิวเมนต์ตรงกับค่าที่ระบุในวงเล็บ คำสั่ง echo แรกจะถูกดำเนินการ หากค่าไม่ตรงกัน คำสั่ง echo ที่สองจะถูกดำเนินการ

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

หลังจากนั้น รันเชลล์สคริปต์สำหรับไฟล์เฉพาะที่มีค่าอาร์กิวเมนต์บางค่า ในกรณีของเรา เราได้ให้ Aqsa เป็นค่าอาร์กิวเมนต์ ซึ่งเท่ากับค่าที่แสดงในวงเล็บ ดังนั้นสคริปต์ทุบตีจะดำเนินการคำสั่ง echo แรกตามที่แสดง

ในทางกลับกัน หากคุณระบุค่าอาร์กิวเมนต์ที่แตกต่างกันในเชลล์สคริปต์ ค่านั้นจะแสดงคำสั่ง echo อื่นๆ ที่นี่ฉันได้เพิ่ม Rimsha เป็นค่าอาร์กิวเมนต์ ซึ่งแตกต่างจากค่าที่ระบุในคำสั่ง if ดังนั้นสคริปต์ทุบตีจะรันคำสั่ง echo ที่สอง

บทสรุป:

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