วิธีจัดการกับอาร์กิวเมนต์บรรทัดคำสั่งใน Bash

Withi Cadkar Kab Xarkiwment Brrthad Kha Sang Ni Bash



ใน 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 เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับพวกเขา