Unix / Linux - ตัวแปรพิเศษ
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับตัวแปรพิเศษใน Unix ในบทก่อนหน้าของเราเราเข้าใจวิธีระมัดระวังเมื่อเราใช้อักขระที่ไม่ใช่ตัวเลขและตัวเลขในชื่อตัวแปร เนื่องจากอักขระเหล่านั้นถูกใช้ในชื่อของตัวแปร Unix พิเศษ ตัวแปรเหล่านี้สงวนไว้สำหรับฟังก์ชันเฉพาะ
ตัวอย่างเช่นไฟล์ $ อักขระแสดงหมายเลขรหัสกระบวนการหรือ PID ของเชลล์ปัจจุบัน -
$echo $$
คำสั่งดังกล่าวเขียน PID ของเชลล์ปัจจุบัน -
29949
ตารางต่อไปนี้แสดงตัวแปรพิเศษจำนวนหนึ่งที่คุณสามารถใช้ในเชลล์สคริปต์ของคุณ -
ซีเนียร์ | ตัวแปรและคำอธิบาย |
---|---|
1 | $0 ชื่อไฟล์ของสคริปต์ปัจจุบัน |
2 | $n ตัวแปรเหล่านี้สอดคล้องกับอาร์กิวเมนต์ที่สคริปต์ถูกเรียกใช้ ที่นี่n เป็นเลขฐานสิบบวกที่ตรงกับตำแหน่งของอาร์กิวเมนต์ (อาร์กิวเมนต์แรกคือ $ 1 อาร์กิวเมนต์ที่สองคือ $ 2 เป็นต้น) |
3 | $# จำนวนอาร์กิวเมนต์ที่ระบุให้กับสคริปต์ |
4 | $* อาร์กิวเมนต์ทั้งหมดจะถูกยกมาสองครั้ง หากสคริปต์ได้รับสองอาร์กิวเมนต์ $ * จะเท่ากับ $ 1 $ 2 |
5 | $@ อาร์กิวเมนต์ทั้งหมดจะถูกยกมาสองครั้ง หากสคริปต์ได้รับสองอาร์กิวเมนต์ $ @ จะเท่ากับ $ 1 $ 2 |
6 | $? สถานะการออกของคำสั่งสุดท้ายที่ดำเนินการ |
7 | $$ หมายเลขกระบวนการของเชลล์ปัจจุบัน สำหรับเชลล์สคริปต์นี่คือ ID กระบวนการที่พวกเขากำลังดำเนินการ |
8 | $! หมายเลขกระบวนการของคำสั่งพื้นหลังสุดท้าย |
อาร์กิวเมนต์บรรทัดคำสั่ง
อาร์กิวเมนต์บรรทัดคำสั่ง $ 1, $ 2, $ 3, ... $ 9 คือพารามิเตอร์ตำแหน่งโดย $ 0 ชี้ไปที่คำสั่งจริงโปรแกรมเชลล์สคริปต์หรือฟังก์ชันและ $ 1, $ 2, $ 3, ... $ 9 เป็นอาร์กิวเมนต์ของ คำสั่ง
สคริปต์ต่อไปนี้ใช้ตัวแปรพิเศษต่างๆที่เกี่ยวข้องกับบรรทัดคำสั่ง -
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
นี่คือตัวอย่างการทำงานสำหรับสคริปต์ด้านบน -
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
พารามิเตอร์พิเศษ $ * และ $ @
มีพารามิเตอร์พิเศษที่อนุญาตให้เข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมดพร้อมกัน $* และ $@ ทั้งสองจะทำหน้าที่เหมือนกันเว้นแต่จะอยู่ในเครื่องหมายคำพูดคู่ "".
พารามิเตอร์ทั้งสองระบุอาร์กิวเมนต์บรรทัดคำสั่ง อย่างไรก็ตามพารามิเตอร์พิเศษ "$ *" จะใช้ทั้งรายการเป็นอาร์กิวเมนต์เดียวโดยมีช่องว่างระหว่างและพารามิเตอร์พิเศษ "$ @" จะนำทั้งรายการและแยกออกเป็นอาร์กิวเมนต์แยกกัน
เราสามารถเขียนเชลล์สคริปต์ดังที่แสดงด้านล่างเพื่อประมวลผลอาร์กิวเมนต์บรรทัดคำสั่งที่ไม่รู้จักโดยใช้พารามิเตอร์พิเศษ $ * หรือ $ @ -
#!/bin/sh
for TOKEN in $*
do
echo $TOKEN
done
นี่คือตัวอย่างการทำงานสำหรับสคริปต์ด้านบน -
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note - ที่นี่ do...done เป็นลูปประเภทหนึ่งที่จะกล่าวถึงในบทช่วยสอนถัดไป
ออกจากสถานะ
$? ตัวแปรแสดงสถานะการออกของคำสั่งก่อนหน้า
สถานะการออกเป็นค่าตัวเลขที่ส่งคืนโดยทุกคำสั่งเมื่อเสร็จสิ้น ตามกฎแล้วคำสั่งส่วนใหญ่จะส่งคืนสถานะการออกเป็น 0 หากพวกเขาทำสำเร็จและ 1 หากไม่สำเร็จ
คำสั่งบางคำสั่งส่งคืนสถานะการออกเพิ่มเติมด้วยเหตุผลบางประการ ตัวอย่างเช่นคำสั่งบางคำสั่งจะแยกความแตกต่างระหว่างประเภทของข้อผิดพลาดและจะส่งคืนค่าการออกต่างๆโดยขึ้นอยู่กับประเภทความล้มเหลว
ต่อไปนี้เป็นตัวอย่างของคำสั่งที่ประสบความสำเร็จ -
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$