Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญ Linux Variables ใน Shell Scripting - ตอนที่ 10: Insights ระดับมืออาชีพ

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

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

Variable Attributes (แอททริบิวต์ของตัวแปร)

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

ตัวอย่างของ variable attribute คือการใช้สวิตช์ '-i' ซึ่งจะเปิดแอททริบิวต์ integer สำหรับตัวแปรที่สอดคล้อง แม้ค่าที่ไม่ใช่ตัวเลขจะถูกส่งให้สวิตช์ '-i' มันไม่會拋出錯誤訊息 และอินเตอร์เพรตเป็น integer ได้ '0' นี่ชัดเจนขึ้นจากตัวอย่างด้านล่าง

ประกาศตัวแปร Integer, bill = 121

admin@wsxdn.com:~$ declare -i bill=121

Printf ค่าของตัวแปร bill

admin@wsxdn.com:~$ printf "%d\n" "$bill"
121

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

admin@wsxdn.com:~$ bill=tecmint

ตอนนี้ printf ค่าตัวแปร bill อีกครั้ง

admin@wsxdn.com:~$ printf "%d\n" "$bill"
0

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

ตอนนี้ คำถามคือ วิธีรู้แอททริบิวต์ของตัวแปรที่ประกาศแล้ว?
admin@wsxdn.com:~$ declare -p bill
declare -i bill="121"

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

อีกครั้ง ถ้าต้องการปิดแอททริบิวต์ของตัวแปร ต้องทำอย่างไร?

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

ปิดแอททริบิวต์ integer สำหรับตัวแปรข้างต้น

admin@wsxdn.com:~$ declare +i bill

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

admin@wsxdn.com:~$ printf "%d\n" "$bill"
bash: printf: bill: invalid number
0

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

admin@wsxdn.com:~$ printf "%s\n" "$bill"
tecmint

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

Read-only Variables (ตัวแปรอ่านอย่างเดียว)

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

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

ประกาศตัวแปร read only (-r) ชื่อ name ค่า "Tecmint.com"

admin@wsxdn.com:~$ declare -r name="Tecmint.com"

Printf ค่าตัวแปรที่ประกาศข้างต้น

admin@wsxdn.com:~$ printf "%s\n" "$name"
Tecmint.com

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

admin@wsxdn.com:~$ declare -r name="Avishek"
bash: declare: name: readonly variable

ตามที่อภิปรายข้างต้น แอททริบิวต์ของ read-only Variable สามารถเปลี่ยนได้ด้วยเครื่องหมาย '+'

Exporting Variables ใน Linux

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

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

admin@wsxdn.com:~$ declare -x variable="Constant_Value"

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

เราต้องการตัวแปรที่ควรเป็น read-only และพร้อมใช้งานนอกสคริปต์ เราต้องใช้สวิตช์ -r และสวิตช์ -x พร้อมกัน

admin@wsxdn.com:~$ declare -rx variable="Constant_Value"

Environment Variables (ตัวแปรสภาพแวดล้อม)

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

ทำความเข้าใจทฤษฎีข้างต้นอย่างปฏิบัติ ที่นี่เรามีสคริปต์ 2 ตัว 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=Tecmint.com
printf "%s\n" "$name"
exit 0

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

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

ไม่ต้องกังวล ว่าตัวแปรเป็น read-only แล้วจะ reassign ได้อย่างไร ไม่จำได้ไหมว่า "การเปลี่ยนแปลงทั้งหมดที่ทำให้ตัวแปรขณะสคริปต์กำลังรัน จะหายไปเมื่อตัวแปรถูกส่งออกนอกสคริปต์."

References (อ้างอิง)

คำสั่ง declare อนุญาตให้ใช้สวิตช์ทั้งหมดด้านล่างรวมถึงการรวมกัน

  1. -a : ประกาศอาร์เรย์
  2. -f : แสดง Function และ Definition
  3. -F : แสดง Function Name
  4. -r : ประกาศตัวแปรเป็น read-only
  5. -x : ประกาศตัวแปรเป็น Exportable
  6. -I : ประกาศตัวแปรเป็น Integer

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