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
$