ค้นหาเว็บไซต์

การทำความเข้าใจและการเขียน 'ตัวแปร Linux' ในการเขียนสคริปต์เชลล์ - ตอนที่ 10


ภาษาสคริปต์เชลล์ของ Linux เป็นประเด็นร้อนมาโดยตลอดและจะเป็นประเด็นร้อนในอนาคตตลอดไป ภาษาสคริปต์ของเชลล์นั้นมหัศจรรย์มาก และมันง่ายมากที่จะทำโปรแกรมในภาษาสคริปต์เหมือนกับภาษาอื่นๆ อย่างไรก็ตาม จำเป็นต้องมีความรู้เชิงลึกเกี่ยวกับสิ่งที่เรากำลังทำและผลลัพธ์ที่คาดหวัง

บทความเชลล์สคริปต์ทั้งหมดที่เราเขียนให้กับผู้อ่านของเราได้รับการชื่นชมอย่างสูง รวมถึงบทความล่าสุด “An Insight of Linux Variables” เรากำลังขยายบทความสุดท้ายไปสู่ระดับใหม่

คุณลักษณะของตัวแปร

ตัวแปรแต่ละตัวในสภาพแวดล้อม Linux มีตัวเลือกที่แน่นอน และตัวเลือกเหล่านั้นเรียกว่า 'คุณสมบัติ' ตัวเลือกหรือคุณลักษณะเหล่านี้สามารถ เปิด และ ปิด ได้เมื่อจำเป็นตามสถานการณ์โดยใช้คำสั่ง "ประกาศ "

ตัวอย่างของแอตทริบิวต์ตัวแปรใช้สวิตช์พูดว่า '-i' ซึ่งจะเปิดแอตทริบิวต์จำนวนเต็มสำหรับตัวแปรที่เกี่ยวข้อง แม้ว่าค่าที่ไม่ใช่ตัวเลขจะถูกส่งไปเพื่อสลับ '-i' ก็จะไม่แสดงข้อความแสดงข้อผิดพลาดและเอาต์พุต '0' เป็นการตีความจำนวนเต็ม จากตัวอย่างด้านล่างนี้จะชัดเจนยิ่งขึ้น

ประกาศตัวแปรจำนวนเต็ม บิล=121

avi@localhost:~$ declare -i bill=121

พิมพ์ค่าของบิลตัวแปร

avi@localhost:~$ printf "%d\n" "$bill" 

121

ให้ค่าตัวแปรเป็นสตริง ประกาศบิลตัวแปรแล้ว ไม่ต้องประกาศครั้งที่สอง เพียงเปลี่ยนค่าของตัวแปรเป็น

avi@localhost:~$ bill=tecmint

ทีนี้ ให้พิมพ์ค่าของบิลตัวแปรอีกครั้ง

avi@localhost:~$ printf "%d\n" "$bill" 

0

สังเกต '0' ในตำแหน่งข้อความแสดงข้อผิดพลาด

คำถามคือ จะทราบคุณลักษณะของตัวแปรที่ประกาศไว้แล้วได้อย่างไร
avi@localhost:~$ declare -p bill 

declare -i bill="121"

ที่นี่สวิตช์ -p (ย่อมาจากการพิมพ์) มาเพื่อช่วยเหลือ

ฉันควรทำอย่างไรเพื่อปิดคุณลักษณะของตัวแปรอีกครั้ง

เพื่อที่จะปิด ปิด คุณลักษณะของตัวแปร สิ่งที่เราต้องการทั้งหมดคือการใส่เครื่องหมาย + (บวก) ก่อนสวิตช์ จากตัวอย่างด้านล่างนี้จะชัดเจนยิ่งขึ้น

สลับปิดแอตทริบิวต์จำนวนเต็มสำหรับตัวแปรด้านบน

avi@localhost:~$ declare +i bill

ตรวจสอบค่าของตัวแปร

avi@localhost:~$ printf "%d\n" "$bill" 

bash: printf: bill: invalid number
0

ตอนนี้พิมพ์ค่าของตัวแปรโดยใช้สตริงสวิตช์

avi@localhost:~$ printf "%s\n" "$bill" 

tecmint

ในตัวอย่างข้างต้น bash ไม่สามารถตัดสินค่าที่ไม่ใช่ตัวเลขว่าเป็นข้อผิดพลาด อย่างไรก็ตาม printf กำลังตีความ ค่าอะไรอาจเป็นตัวเลข และค่าอะไรไม่สามารถเป็นได้

ตัวแปรแบบอ่านอย่างเดียว

คุณอาจเคยได้ยิน Read Only Memory (ROM) แต่ Read-only Variable คืออะไร มันมีความคล้ายคลึงกับ ROM หรือไม่?

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

Decalre ชื่อตัวแปรแบบอ่านอย่างเดียว (-r) ซึ่งมีค่าเป็น “linux-console.net ”

avi@localhost:~$ declare -r name="linux-console.net"

พิมพ์ค่าของตัวแปรที่ประกาศข้างต้น

avi@localhost:~$ printf "%s\n" "$name" 

linux-console.net

ลองเปลี่ยนค่าของตัวแปร

avi@localhost:~$ declare -r name="Avishek" 

bash: declare: name: readonly variable

ตามที่กล่าวไว้ข้างต้น คุณลักษณะของตัวแปรแบบอ่านอย่างเดียวสามารถเปลี่ยนได้โดยใช้เครื่องหมาย '+'

การส่งออกตัวแปรใน Linux

ตัวแปรเชลล์ทั้งหมดที่ประกาศในเชลล์สคริปต์จะพร้อมใช้งานจนกว่าสคริปต์จะทำงาน ภายนอกสคริปต์ไม่มีตัวแปรจากสคริปต์ กระบวนการทำให้ตัวแปรพร้อมใช้งานภายนอกสคริปต์เรียกว่าการส่งออกตัวแปร

ตัวแปรสามารถส่งออกนอกเชลล์ได้โดยใช้สวิตช์ ประกาศ -x (ส่งออก) ซึ่งรับทราบเชลล์สิ่งที่คุณต้องการส่งออก สวิตช์ประกาศส่งออกสามารถใช้เป็น

avi@localhost:~$ declare -x variable=”Constant_Value”

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

เราต้องการให้ตัวแปรที่ควรเป็นแบบอ่านอย่างเดียวและพร้อมใช้งานนอกสคริปต์ เราจำเป็นต้องใช้สวิตช์ -r และสวิตช์ -x ในเวลาเดียวกัน

avi@localhost:~$ declare -rx variable=”Constant_Value”

ตัวแปรสภาพแวดล้อม

ตัวแปรที่ใช้ร่วมกันระหว่างโปรแกรมและโปรแกรมที่รันตัวแปรเหล่านั้น สามารถส่งออกตัวแปรสภาพแวดล้อมได้ แต่ไม่สามารถกำหนดแอตทริบิวต์ให้กับตัวแปรได้

ทำความเข้าใจทฤษฎีข้างต้นในทางปฏิบัติ ที่นี่เรามีสองสคริปต์ 0.sh และ 1.sh

0.sh
#!/bin/bash 
declare -rx name=Tecmint 
bash 0.sh 
exit 0

และสคริปต์ที่สองก็คือ

1.sh
#!/bin/bash 
printf "%s\n" "$name" 
name=linux-console.net 
printf "%s\n" "$name"
exit 0

สิ่งที่เกิดขึ้นคือตัวแปร (ชื่อ) ถูกประกาศว่าเป็นแบบอ่านอย่างเดียวและส่งออก และทันทีหลังจากเรียกใช้สคริปต์ที่สองนั้น

สคริปต์ที่สองเพิ่งพิมพ์ตัวแปรจากสคริปต์แรกที่ส่งออกในคำสั่ง printf แรก ในคำสั่ง printf ที่สอง จะแสดงค่าใหม่ที่กำหนดให้กับตัวแปร 'name'

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

อ้างอิง

คำสั่ง ประกาศ อนุญาตสวิตช์ทั้งหมดด้านล่างพร้อมกับการรวมกัน

  1. -a : ประกาศอาร์เรย์
  2. -f : ฟังก์ชั่นการแสดงผลและคำจำกัดความ
  3. -F : แสดงชื่อฟังก์ชัน
  4. -r : ประกาศตัวแปรเป็นแบบอ่านอย่างเดียว
  5. -x : ประกาศตัวแปรว่าสามารถส่งออกได้
  6. -I : ประกาศตัวแปรเป็นจำนวนเต็ม

นั่นคือทั้งหมดที่สำหรับตอนนี้. ในบทความถัดไป เราจะพูดถึงวิธีการแทนที่ตัวแปรโดยใช้คำสั่ง 'eval' และตัวแปรที่กำหนดไว้แล้วใน bash ก่อนที่จะปิดหัวข้อนี้ หวังว่าทุกคนจะเพลิดเพลินกับการเดินทางสู่การเขียนสคริปต์เชิงลึก จนกว่าจะคอยติดตามและเชื่อมต่อกับ linux-console.net