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