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

How Handle Command Line Arguments Bash Script



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

การใช้ตัวแปรอาร์กิวเมนต์:

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







ตัวอย่าง -1: การส่งค่าตัวเลขสามค่าเป็นอาร์กิวเมนต์

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



#!/bin/bash

# การนับจำนวนอาร์กิวเมนต์ทั้งหมด
โยนออก 'จำนวนอาร์กิวเมนต์ทั้งหมด : $#'

# อ่านค่าอาร์กิวเมนต์เป็นรายบุคคล
โยนออก 'ค่าอาร์กิวเมนต์แรก : $1'
โยนออก 'ค่าอาร์กิวเมนต์ที่สอง : $2'
โยนออก 'ค่าอาร์กิวเมนต์ที่สาม : $3'

# การอ่านค่าอาร์กิวเมนต์โดยใช้ลูป
สำหรับargvalใน ' [ป้องกันอีเมล] '
ทำ
โยนออก -NS '$argval'
เสร็จแล้ว

# การเพิ่มค่าอาร์กิวเมนต์
ผลรวม= $(($ 1+$ 2+$ 3))

#พิมพ์ผล
โยนออก -และ 'NSผลรวม =$sum'

เรียกใช้ไฟล์ทุบตีด้วยค่าอาร์กิวเมนต์ตัวเลขสามค่า



$ทุบตีcmdline1.shห้าสิบ 35 สิบห้า





ตัวอย่าง -2: ใช้ชื่อไฟล์เป็นอาร์กิวเมนต์

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

#!/bin/bash
ชื่อไฟล์=$ 1
Totalchar=``ห้องน้ำ -ค $ชื่อไฟล์``
โยนออก 'จำนวนอักขระทั้งหมดคือ$ totalchar'

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



$ทุบตีcmdline2.sh employee.txt
$ห้องน้ำ -คพนักงาน.txt

การใช้ฟังก์ชัน getopts:

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

ตัวอย่าง -1: การอ่านอาร์กิวเมนต์โดยฟังก์ชัน getopts

สร้างไฟล์ทุบตีและเพิ่มสคริปต์ต่อไปนี้เพื่อทำความเข้าใจการใช้ getopts การทำงาน. ฟังก์ชัน 'getopts' ใช้กับ while loop เพื่ออ่านตัวเลือกอาร์กิวเมนต์บรรทัดคำสั่งและค่าอาร์กิวเมนต์ ที่นี่ใช้ 4 ตัวเลือกคือ 'ฉัน', 'น', 'ม' และ 'และ' . คำสั่ง case ใช้เพื่อจับคู่ตัวเลือกเฉพาะและเก็บค่าอาร์กิวเมนต์ไว้ในตัวแปร สุดท้าย พิมพ์ค่าของตัวแปร

#!/bin/bash
ในขณะที่ getopts ':ในฉัน:'โกรธ;ทำ
กรณี $ arg ใน
ผม) NS=$OPTARG;;
NS) ชื่อ=$OPTARG;;
NS) วันผลิต=$OPTARG;;
และ) วันที่หมดอายุ=$OPTARG;;
esac
เสร็จแล้ว
โยนออก -และ 'NS$ID $ชื่อ $Manufacturing_date $หมดอายุ_dateNS'

เรียกใช้ไฟล์ด้วยตัวเลือกและค่าอาร์กิวเมนต์ต่อไปนี้ ที่นี่ p100 คือค่าของตัวเลือก -i 'Hot Cake' คือค่าของ -n ตัวเลือก '01-01-2018' คือค่าของตัวเลือก -m และ '06-01-2018' คือค่าของ - อี ตัวเลือก

$ทุบตีcmdline3.sh-ผมp001-NS 'เค้กร้อน' -NS '01 -01-2018 ' -และ '06 -01-2018 '

เมื่อคุณต้องการส่งค่าอย่างง่ายในสคริปต์ ควรใช้ตัวแปรอาร์กิวเมนต์ แต่ถ้าคุณต้องการส่งข้อมูลในรูปแบบที่จัดรูปแบบ ควรใช้ฟังก์ชัน getopts เพื่อดึงค่าอาร์กิวเมนต์ ดูข้อมูลเพิ่มเติม วีดีโอ !