ใน Linux เราใช้อาร์กิวเมนต์บรรทัดคำสั่งเป็นอินพุตสำหรับสคริปต์ทุบตี Bash สามารถใช้อาร์กิวเมนต์บรรทัดคำสั่งเหล่านี้ตามลำดับและแยกวิเคราะห์เป็นตัวเลือกได้ อาร์กิวเมนต์เหล่านี้ช่วยให้คุณส่งผลต่อการกระทำและเอาต์พุตของสคริปต์แบบไดนามิก
คุณสามารถกำหนดค่าอาร์กิวเมนต์เหล่านี้ให้แตกต่างกันเพื่อให้มีผลกับอินพุตและเอาต์พุต นั่นเป็นเหตุผลที่การจัดการ args บรรทัดคำสั่งใน bash เป็นสิ่งสำคัญ แต่ผู้ใช้ใหม่จำนวนมากจำเป็นต้องเรียนรู้วิธีการทำ ดังนั้นในคู่มือนี้ เราจะอธิบายวิธีต่างๆ ในการจัดการอาร์กิวเมนต์บรรทัดคำสั่งใน bash
วิธีจัดการกับอาร์กิวเมนต์บรรทัดคำสั่งใน Bash
มีหลายวิธีในการจัดการ args บรรทัดคำสั่งใน Bash ดังนั้นลองมาดูกันเพื่อรับข้อมูลสั้น ๆ :
ฟังก์ชัน getopt
ฟังก์ชัน getopt มีประโยชน์เนื่องจากมีตัวเลือกและไวยากรณ์สำหรับการกำหนดและแยกวิเคราะห์อาร์กิวเมนต์ใน bash เป็นฟังก์ชันในตัวของ Linux ที่คุณสามารถใช้ในขณะที่สร้างไฟล์ฐานข้อมูลหรือรายงานในรูปแบบเฉพาะตามอาร์กิวเมนต์ ฟังก์ชัน getopt ช่วยแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งสั้นๆ เนื่องจากมีอาร์กิวเมนต์สองประเภท:
- อาร์กิวเมนต์สั้น: นี่คืออาร์กิวเมนต์ที่มีอักขระตัวเดียวตามด้วยยัติภังค์ ตัวอย่างเช่น -a, -l, -h เป็นต้น เป็นตัวอย่างของอาร์กิวเมนต์เดี่ยว
- อาร์กิวเมนต์ยาว: นี่คืออาร์กิวเมนต์หลายอักขระตามด้วยยัติภังค์คู่ มีตัวอย่างอาร์กิวเมนต์ยาวหลายแบบ เช่น –all, –list, –help เป็นต้น
ลองมาตัวอย่างที่เราจะจัดการกับอาร์กิวเมนต์บรรทัดคำสั่งโดยใช้ยูทิลิตี้ getopt เราได้สร้างสคริปต์ทุบตีชื่อ “getopt.sh” ซึ่งมีข้อมูลต่อไปนี้:
!/ ถัง / ทุบตี
ในขณะที่ รับ 'เอบีซีดี:' รายละเอียด; ทำ
กรณี ' รายละเอียด $ ' ใน
ก )
เสียงสะท้อน 'ชื่อพลเมืองคือ $OPTARG ' ;;
ข )
เสียงสะท้อน “เลขประจำตัวประชาชนคือ $OPTARG ' ;;
ค )
เสียงสะท้อน “บ้านเกิดคือ $OPTARG ' ;;
ง )
เสียงสะท้อน “อาชีพคือ $OPTARG ' ;;
* )
ทางออก 1 ;;
เอสแซค
เสร็จแล้ว
กะ ' $(($การเลือก -1) )'
ถ้า [ ! -กับ 1 ดอลลาร์ ] ; แล้ว
เสียงสะท้อน 'สถานภาพการสมรส $1'
อื่น
เสียงสะท้อน 'ไม่มีรายการ'
ทางออก 1
เป็น
ถ้า [ ! -กับ $2 ] ; แล้ว
เสียงสะท้อน 'สมาชิกในครอบครัว $2'
เป็น
ตอนนี้มาดำเนินการสคริปต์ด้วยอาร์กิวเมนต์ที่จำเป็นในการป้อนข้อมูล:
ดังที่คุณเห็นในภาพด้านบน เรารันสคริปต์ด้วยฟังก์ชัน getopt เท่านั้น แล้วจึงเพิ่มอาร์กิวเมนต์ปกติเพื่อให้ได้ผลลัพธ์ที่สมบูรณ์
การใช้แฟล็ก
แฟล็กไม่มีอะไรนอกจากอักขระเดี่ยวที่นำหน้าด้วยยัติภังค์ (-) เมื่อเราส่งอาร์กิวเมนต์โดยใช้ฟังก์ชัน getopt เราจะใช้แฟล็ก -a, -b, -c คือตัวอย่างบางส่วนของแฟล็ก ตัวอย่างเช่น สคริปต์ต้องการชื่อพลเมือง ID สถานที่ อายุ และอาชีพ ดังนั้นเราจึงใช้แฟล็ก j, k, l, m, n เพื่อกำหนดชื่อพลเมือง ID สถานที่ อายุ และอาชีพพร้อมกัน:
#!/bin/bashในขณะที่ รับ j:k:l:m:n: flag_info
ทำ
กรณี ' ${flag_info} ' ใน
< เก่า >
< นั่น > เจ ) ชื่อพลเมือง = ${OPTARG} ;; นั่น >
< นั่น > เค ) รหัสพลเมือง = ${OPTARG} ;; นั่น >
< นั่น > ล ) สถานที่ = ${OPTARG} ;; นั่น >
< นั่น > ม ) อายุ = ${OPTARG} ;; นั่น >
< นั่น > น ) อาชีพ = ${OPTARG} ;; นั่น >
เก่า >
เอสแซค
เสร็จแล้ว
เสียงสะท้อน 'นี่คือรายละเอียดที่ป้อน:'
เสียงสะท้อน 'ชื่อพลเมือง: $ชื่อพลเมือง ' ;
เสียงสะท้อน 'เลขประจำตัวประชาชน: $ประชาชน ' ;
เสียงสะท้อน 'สถานที่: $สถานที่ ' ;
เสียงสะท้อน 'อายุ: อายุ $ ' ;
เสียงสะท้อน 'อาชีพ: $อาชีพ ' ;
สคริปต์จะให้ผลลัพธ์ต่อไปนี้ในเทอร์มินัล:
. /< สคริปต์ > .sh -เจ แดนนี่ -k 476 -l โตรอนโต -ม 25 -น ผู้เขียน
โดยใช้ [ป้องกันอีเมล] ด้วยลูป
“ [ป้องกันอีเมล] ” ตัวแปรคืออะไรนอกจากอาร์เรย์ของอาร์กิวเมนต์อินพุตทั้งหมด เราสามารถส่งผ่านอินพุตจำนวนเท่าใดก็ได้โดยใช้ปุ่ม “ [ป้องกันอีเมล] ' ตัวแปร. คุณสามารถใช้ตัวแปรนี้เป็นลูปเพื่อวนซ้ำอาร์กิวเมนต์ “ [ป้องกันอีเมล] ” ตัวแปรมีประโยชน์แล้ว; คุณไม่ทราบขนาดอินพุตและไม่สามารถรับอาร์กิวเมนต์ตำแหน่งได้ ดังนั้น คุณสามารถใช้ “ [ป้องกันอีเมล] แทนที่จะกำหนดฟังก์ชัน getopt ซ้ำแล้วซ้ำเล่า นี่คือตัวอย่างการใช้ลูปและ [ป้องกันอีเมล] ร่วมกันในสคริปต์:
#!/bin/bashในหนึ่ง = ( “$ @ ” )
ถ้า [ $# -gt 1 ]
แล้ว
เพิ่ม =$ ( ( ${จำนวน[0]} + ${จำนวน[1]} ) )
เสียงสะท้อน 'การบวกจำนวนทั้งหมดคือ: เพิ่ม $ '
การลบ =$ ( ( ${จำนวน[0]} - ${จำนวน[1]} - ${จำนวน[2]} ) )
เสียงสะท้อน 'การลบตัวเลขคือ: การลบ $ '
คูณ =$ ( ( ${จำนวน[0]} * ${จำนวน[1]} * ${จำนวน[2]} ) )
เสียงสะท้อน 'การคูณจำนวนคือ: $คูณ '
ดิวิชั่น1 =$ ( ( ${จำนวน[0]} / ${จำนวน[1]} ) )
เสียงสะท้อน 'กอง ${จำนวน[0]} และ ${จำนวน[1]} เป็น: $หาร1 '
ดิวิชั่น2 =$ ( ( ${จำนวน[1]} / ${จำนวน[2]} ) )
เสียงสะท้อน “กอง. ${จำนวน[1]} และ ${จำนวน[2]} เป็น: $division2 '
ส่วนที่ 3 =$ ( ( ${จำนวน[0]} / ${จำนวน[2]} ) )
เสียงสะท้อน “กอง. ${จำนวน[0]} และ ${จำนวน[2]} เป็น: $division2 '
เป็น
สคริปต์ด้านบนทำการคำนวณทางคณิตศาสตร์ที่แตกต่างกันตามอาร์กิวเมนต์บรรทัดคำสั่ง ตัวอย่างเช่น เราได้ป้อน 50, 35 และ 15 เป็นอินพุต:
การใช้พารามิเตอร์ตำแหน่ง
คุณสามารถเข้าถึงพารามิเตอร์ตำแหน่งได้เมื่อเข้าถึง $1 ก่อน จากนั้น $2 และอื่น ๆ ตัวอย่างเช่น ลองสร้างสคริปต์ที่อ่านชื่อเป็นอาร์กิวเมนต์แรก จากนั้นตามด้วยเมืองเป็นอาร์กิวเมนต์ที่สอง อย่างไรก็ตาม หากคุณผ่านเมืองก่อนแล้วจึงชื่อ ก็จะถือว่าชื่อเป็นเมืองและในทางกลับกัน มาเจาะลึกลงไปในสคริปต์ต่อไปนี้เพื่อทำความเข้าใจแนวคิดนี้:
#!/bin/bashเสียงสะท้อน 'นี่คือรายละเอียดที่ป้อน'
เสียงสะท้อน 'ชื่อ $1'
เสียงสะท้อน 'เมือง $2'
คุณต้องเพิ่มชื่อและเมืองในขณะที่รันสคริปต์ในเทอร์มินัล:
ห่อ
นี่คือทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับวิธีการจัดการอาร์กิวเมนต์บรรทัดคำสั่งใน bash เราได้อธิบายแนวทางต่างๆ ที่คุณสามารถลองได้ด้วยตัวอย่างที่เหมาะสม มีคำสั่งต่าง ๆ หากคุณต้องการเพิ่มอาร์กิวเมนต์ในสคริปต์ ดังนั้นอย่าลืมไปที่ Linuxhint เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับพวกเขา