Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

ข้อมูลเชิงลึกของ “ตัวแปร” ของ Linux ในภาษาสคริปต์ของเชลล์ – ตอนที่ 9

เราได้เขียนบทความเกี่ยวกับ Linux Shell Scripting . แล้ว ซึ่งได้รับการต้อนรับอย่างอบอุ่นในครั้งนั้นและมีความเกี่ยวข้องมากแม้กระทั่งตอนนี้ นี่คือลิงค์ไปยังชุดบทความเกี่ยวกับเชลล์สคริปต์

  1. เรียนรู้การเขียนสคริปต์ Linux Shell

ในบทความนี้ เราจะเห็นตัวแปร , การดำเนินการและการใช้งานในเชลล์สคริปต์

ข้อมูลเชิงลึกของ “ตัวแปร” ของ Linux ในภาษาสคริปต์ของเชลล์ – ตอนที่ 9

การบันทึกผลลัพธ์

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

ตัวแปรในภาษาสคริปต์

ตัวแปรเป็นองค์ประกอบสำคัญที่ใช้ในการเขียนสคริปต์ของเชลล์และประกาศโดยใช้คำสั่งทุบตี “ประกาศ ” หากต้องการประกาศตัวแปรให้พูดว่า 'ระดับ ' เราต้องดำเนินการตามคำสั่งด้านล่าง

$ declare LEVEL

หมายเหตุ :เราต้องใช้ “typecast ” ซึ่งเป็นคำสั่งในตัวสำหรับความเข้ากันได้ของ korn shell 'การประกาศ' นั้นล้ำหน้ากว่าและมีฟีเจอร์ทั้งหมด ดังนั้นจึงแนะนำเมื่อใช้ BASH

กฎ
  1. ชื่อตัวแปรต้องพิสูจน์การใช้ตัวแปรในสคริปต์
  2. ขอแนะนำให้ใช้ชื่อตัวแปรเดียวกันตลอดทั้งโปรแกรม
  3. ชื่อตัวแปรสามารถเป็นตัวพิมพ์ใหญ่และตัวพิมพ์เล็กได้ แต่โดยหลักการแล้ว คำสั่งเชลล์จะเป็นตัวพิมพ์เล็ก ดังนั้นเราจึงควรใช้ชื่อตัวแปรเป็นตัวพิมพ์ใหญ่ เพื่อขจัดความสับสน เช่น TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT เป็นต้น

การนำไปใช้

ตัวแปรสามารถกำหนดค่าโดยใช้เครื่องหมายเท่ากับ (= ). ในการกำหนดสตริงว่างให้กับตัวแปร เราต้องไม่ใส่ค่าใดๆ หลังเครื่องหมายเท่ากับ

$ LEVEL =

ตรวจสอบค่าที่เก็บไว้ในตัวแปร 'LEVEL' เป็น.

$ printf "%i" $LEVEL

printf , คำสั่งส่วนใหญ่ของ 'C ' โปรแกรมเมอร์รับทราบ พิมพ์ข้อมูล %i – หมายถึงจำนวนเต็ม เราสามารถแทนที่ด้วย %c สำหรับตัวละครหรือ %c สำหรับสตริงตามความจำเป็น

$LEVEL:หมายเหตุ '$ ' ซึ่งทำงานเป็นตัวทดแทนค่าสำหรับตัวแปร 'LEVEL' .

ตัวอย่างผลลัพธ์
$ printf "%i" $LEVEL
0

กำหนดค่าให้กับตัวแปร

$ LEVEL=0

ตรวจสอบข้อมูลที่เก็บไว้เป็นตัวแปร

$ printf "%i" $LEVEL
0

หมายเหตุ :เป็นที่น่าสนใจที่จะสังเกตว่าในทั้งสองกรณีเมื่อเราไม่ได้กำหนดค่าให้กับตัวแปรและเมื่อเรากำหนดค่า ‘0 ' กับตัวแปร 'LEVEL ' ผลลัพธ์ 0 . แม้ว่าเอาต์พุตจะเหมือนกันในทั้งสองกรณี แต่เชลล์สคริปต์จัดการการประกาศตัวแปรทั้งสองต่างกัน

กำหนดค่าใหม่ให้กับตัวแปร

$ LEVEL=121

ตรวจสอบข้อมูลที่เก็บไว้เป็นตัวแปร

$ printf "%i" $LEVEL
121

ยกเลิกการตั้งค่าตัวแปร

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

$ unset LEVEL

ตัวแปรที่กำหนดไว้ล่วงหน้าใน BASH

BASH มีมากกว่า 50 ตัวแปรที่กำหนดไว้ล่วงหน้า ตัวแปรเหล่านี้บางตัวมีความหมายพิเศษที่แนบมากับ BASH เช่น ตัวแปร RANDOM ส่งออกตัวเลขสุ่ม หากไม่ได้ตั้งค่าและกำหนดอีกครั้ง ค่าตัวแปรเดิมจะหายไปตลอดกาล ดังนั้นจึงไม่แนะนำให้ใช้ตัวแปรที่ระบบกำหนด

นี่คือรายการของตัวแปร BASH ที่มีประโยชน์

  1. BASH—ชื่อพาธแบบเต็มของ Bash
  2. BASH_ENV—ในเชลล์สคริปต์ ชื่อของไฟล์โปรไฟล์ที่ทำงานก่อนเริ่มสคริปต์
  3. BASH_VERSION—เวอร์ชันของ Bash (เช่น 2.04.0(1)-release)
  4. COLUMNS—จำนวนอักขระต่อบรรทัดบนจอแสดงผลของคุณ (เช่น 80)
  5. HOSTNAME—ชื่อคอมพิวเตอร์ ภายใต้ Linux บางเวอร์ชัน นี่อาจเป็นชื่อเครื่อง ส่วนอื่นๆ อาจเป็นชื่อโดเมนแบบเต็มก็ได้
  6. HOSTTYPE—ประเภทของคอมพิวเตอร์
  7. HOME—ชื่อโฮมไดเร็กทอรีของคุณ
  8. OSTYPE—ชื่อของระบบปฏิบัติการ
  9. PATH—รายการเส้นทางการค้นหาที่คั่นด้วยเครื่องหมายทวิภาคเพื่อค้นหาคำสั่งที่จะดำเนินการ
  10. PPID—ID โปรเซสของโปรเซสหลักของเชลล์
  11. PROMPT_COMMAND—คำสั่งที่จะดำเนินการก่อนการตั้งค่าสตริงพร้อมท์หลักของ PS1
  12. PWD—ไดเร็กทอรีการทำงานปัจจุบัน (ตามที่ตั้งค่าโดยคำสั่ง cd)
  13. RANDOM—ส่งกลับตัวเลขสุ่มระหว่าง 0 ถึง 32767 ในแต่ละครั้งที่มีการอ้างอิง
  14. SHELL—เชลล์ที่ต้องการใช้ สำหรับโปรแกรมที่เริ่มต้นเชลล์ให้กับคุณ
  15. ระยะ—ประเภทการจำลองเทอร์มินัล (เช่น คอนโซล)

กฎการแยกคำ

$ LEVEL=0
$ printf "%i" $LEVEL
0

AND

$ LEVEL=”0”
$ printf "%i" $LEVEL
0

ในทั้งสองกรณีผลลัพธ์ยังคงเหมือนเดิม ผลลัพธ์เมื่อใช้ใบเสนอราคาต่างกันอย่างไร

ให้ตรวจสอบสิ่งเดียวกันกับข้อมูลตัวแปรต่างๆ กัน

$ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
$ printf "%i" $LEVEL
0

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

$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
$ printf "%s" $LEVEL 
0;1;2;3;4;5

ผลยังไม่ถูกต้อง BASH รับค่าตัวแปรและลบช่องว่างทั้งหมดระหว่างค่าเหล่านี้ ดังนั้น printf ไม่ได้ตีความ 0,1,2,3,4,5 เป็นค่าที่แตกต่างกัน แล้วทางออกคืออะไร?

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

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

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

$ LEVEL=5 
$ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
$ printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

การแยกส่วนของข้อความที่ยกมาโดยเว้นวรรคจะส่งผลให้เกิดปัญหาเดียวกันกับที่กล่าวไว้ข้างต้น ทุบตีจะถือว่าพื้นที่สีขาวเป็นการสิ้นสุด อีกวิธีหนึ่งในการทดแทนตัวแปรคือ

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

เครื่องหมายคำพูดเดี่ยวจำกัด BASH จากการพิมพ์อักขระพิเศษ

$ printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

แบ็กสแลช (/)

แบ็กสแลชทำงานเหมือนอัญประกาศเดี่ยวสำหรับหนึ่งอักขระ คุณคิดว่าคุณจะพิมพ์อย่างไร ( )?

$ printf "%c" "\""

เมื่อ %q จัดกลุ่มด้วย printf ให้แบ็กสแลชหลังทุกคำเพื่อให้แน่ใจว่ามีการเว้นวรรคคำ

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

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

จนกว่าจะถึงตอนนั้น คอยติดตามและเชื่อมต่อกับ Tecmint.com . อย่าลืมให้ข้อเสนอแนะที่มีค่าของคุณในส่วนความคิดเห็นด้านล่าง