บทความนี้เป็นส่วนหนึ่งของชุดการสอนทุบตีที่กำลังดำเนินอยู่ เช่นเดียวกับภาษาการเขียนโปรแกรมอื่น ๆ Bash ยังมีตัวแปรอีกด้วย
ตัวแปร Bash ให้การจัดเก็บข้อมูลชั่วคราวสำหรับข้อมูลที่จำเป็นในช่วงอายุของโปรแกรม
ไวยากรณ์:
VARNAME=VALUE
หมายเหตุ: ไม่ควรมีที่ว่างรอบๆ เครื่องหมาย “=" ในการมอบหมายตัวแปร เมื่อคุณใช้ VAR=VALUE เชลล์จะเห็นว่า “=" เป็นสัญลักษณ์และถือว่าคำสั่งนั้นเป็นการกำหนดค่าตัวแปร เมื่อคุณใช้ VAR =VALUE เชลล์จะถือว่า VAR ต้องเป็นชื่อของคำสั่งและพยายามดำเนินการ
เชลล์ไม่สนใจชนิดของตัวแปร ตัวแปรสามารถเก็บสตริง จำนวนเต็ม หรือจำนวนจริงได้
ตัวอย่าง 1 การใช้การกำหนดตัวแปร Bash อย่างง่าย
สคริปต์ต่อไปนี้สร้างตัวแปรที่เรียกว่า LIST และกำหนดค่า “/var/opt/bin” ในการเข้าถึงตัวแปร เพียงเติม $ นำหน้าชื่อตัวแปรซึ่งจะทำให้คุณได้รับค่าที่เก็บไว้ในตัวแปรนั้น
$ cat sample.sh #!/bin/bash LIST="/var/opt/bin/" ls -l $LIST
ดำเนินการสคริปต์ด้านบน ซึ่งจะแสดงรายการ /var/opt/bin ในรูปแบบยาวดังที่แสดงด้านล่าง
$ ./sample.sh total 8 drwxrwsr-x 2 bin bin 4096 Jan 29 06:43 softwares drwxr-sr-x 5 root bin 4096 Sep 2 2009 llist
ขอบเขตตัวแปรทุบตี – ในพื้นที่และทั่วโลก
ใน Bash ไม่จำเป็นต้องประกาศตัวแปร แต่เมื่อคุณเข้าถึงตัวแปรที่ยังไม่ได้ใช้งาน คุณจะไม่ได้รับข้อความเตือนหรือข้อความแสดงข้อผิดพลาดใดๆ แต่จะแสดงค่าว่างแทน
ตัวอย่างที่ 2 ค่าว่างในตัวแปรทุบตี
$ cat var1.sh #!/bin/sh echo "Variable value is: $VAR1" VAR1="GEEKSTUFF" echo "Variable value is: $VAR1" $ ./var1.sh Variable value is: Variable value is: GEEKSTUFF
ดังที่แสดงไว้ข้างต้น เริ่มต้นตัวแปรจะมีค่าว่าง หลังจากกำหนด คุณจะได้รับค่าของคุณ คำสั่ง export ใช้เพื่อส่งออกตัวแปรจากเชลล์แบบโต้ตอบ การส่งออกแสดงผลกระทบต่อขอบเขตของตัวแปร
ตัวอย่างที่ 3 Bash Variables โดยไม่ต้องเอ็กซ์พอร์ต
กำหนดตัวแปรที่มีค่าในเชลล์แบบโต้ตอบ และพยายามเข้าถึงตัวแปรนั้นในเชลล์สคริปต์ของคุณ
$ VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
ตอนนี้ รันสคริปต์ด้านบนดังที่แสดงด้านล่าง
$ ./var2.sh VAR2= VAR2=UNIX
คุณจะได้รับค่าว่างสำหรับตัวแปร VAR2 เชลล์เก็บตัวแปร VAR2 ด้วย LINUX เฉพาะในเชลล์ปัจจุบันเท่านั้น ในระหว่างการดำเนินการ var2.sh เชลล์จะวางไข่และเรียกใช้สคริปต์ ดังนั้นตัวแปร VAR2 จะไม่มีค่าในเชลล์ที่เกิด คุณต้องส่งออกตัวแปรเพื่อให้โปรแกรมอื่นสืบทอดมา ซึ่งรวมถึงเชลล์สคริปต์ดังที่แสดงด้านล่าง
ตัวอย่างที่ 4 การส่งออก Bash Variable
$ export VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
ตอนนี้รันสคริปต์ด้านบน
$ ./var2.sh VAR2=LINUX VAR2=UNIX $ $echo $VAR2 LINUX
ตอนนี้ คุณสามารถสังเกตได้ว่าหลังจากเรียกใช้เชลล์สคริปต์ var2.sh แล้ว ค่าของ VAR2 คือ LINUX เนื่องจากตัวแปรจะไม่ถูกส่งกลับไปยังเชลล์แบบโต้ตอบของคุณ เว้นแต่คุณจะเรียกใช้สคริปต์ในเชลล์ปัจจุบัน
การประกาศตัวแปรทุบตี
การใช้คำสั่งประกาศใน bash เราสามารถจำกัดค่าที่กำหนดให้กับตัวแปรได้ มันจำกัดคุณสมบัติของตัวแปร ตัวเลือกในคำสั่งประกาศใช้เพื่อกำหนดประเภทของตัวแปร
ไวยากรณ์:
declare option variablename
- ประกาศเป็นคีย์เวิร์ด
- ตัวเลือกอาจเป็น:
- -r ตัวแปรแบบอ่านอย่างเดียว
- -i ตัวแปรจำนวนเต็ม
- - ตัวแปรอาร์เรย์
- -f สำหรับ funtions
- -x ประกาศและส่งออกคำสั่งที่ตามมาผ่านสภาพแวดล้อม
ตัวอย่างที่ 5. การประกาศตัวแปร Bash โดยใช้การประกาศ
$ cat declar.sh #!/bin/bash declare -i intvar intvar=123 # Assigning integer value. echo $intvar intvar=12.3 #Trying to store string type value to an integer variable echo $intvar declare -r rovar=281 rovar=212 # Trying to change the readonly variable.
จากการดำเนินการด้านล่าง คุณจะสังเกตเห็นข้อความแสดงข้อผิดพลาดเมื่อคุณกำหนดข้อมูลที่ไม่ถูกต้องให้กับตัวแปร
$ ./declar.sh 123 t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3") 123 t.sh: line 11: rovar: readonly variable
ตัวแปร Global Bash
ตัวแปรโกลบอลเรียกอีกอย่างว่าตัวแปรสภาพแวดล้อม ซึ่งจะใช้ได้กับเชลล์ทั้งหมด คำสั่ง printenv ใช้เพื่อแสดงตัวแปรสภาพแวดล้อมทั้งหมด
$ printenv SHELL=/bin/bash HISTSIZE=1000 SSH_TTY=/dev/pts/1 HOME=/root LOGNAME=root CVS_RSH=ssh
ตัวแปร Bash ในเครื่อง
ตัวแปรโลคัลสามารถมองเห็นได้เฉพาะภายในบล็อกของโค้ด local เป็นคีย์เวิร์ดที่ใช้ในการประกาศตัวแปรท้องถิ่น ในฟังก์ชัน ตัวแปรโลคัลมีความหมายเฉพาะภายในบล็อกฟังก์ชันนั้นเท่านั้น
ตัวอย่างที่ 6 ตัวแปร Bash ทั่วโลกและในเครื่อง
$ cat localvar.sh #!/bin/bash pprint() { local lvar="Local content" echo -e "Local variable value with in the function" echo $lvar gvar="Global content changed" echo -e "Global variable value with in the function" echo $gvar } gvar="Global content" echo -e "Global variable value before calling function" echo $gvar echo -e "Local variable value before calling function" echo $lvar pprint echo -e "Global variable value after calling function" echo $gvar echo -e "Local variable value after calling function" echo $lvar
ดำเนินการสคริปต์ข้างต้น
$ sh t.sh Global variable value before calling function Global content Local variable value before calling function Local variable value with in the function Local content Global variable value with in the function Global content changed Global variable value after calling function Global content changed Local variable value after calling function
ในผลลัพธ์ข้างต้น ตัวแปรโลคัลจะมีเฉพาะค่าว่างก่อนและหลังการเรียกใช้ฟังก์ชัน ขอบเขตของมันอยู่ในฟังก์ชันเท่านั้น มันหายไปจากฟังก์ชันแล้ว ในขณะที่ตัวแปรส่วนกลางมีค่าที่อัปเดตแม้หลังจากเรียกใช้ฟังก์ชันแล้ว