บทความนี้จะแสดงวิธีใช้ variables ใน Bash และ Shell scripts ใน Linux
Bash (หรือ Linux Shell) scripts คือไฟล์ที่คุณเขียนมีคำสั่งเพื่อ automate งานทั่วไปและประหยัดเวลา
Variables คือสิ่งใน scripts ที่เก็บค่าไว้ใช้ภายหลัง – ตัวเลข หรือ filename หรืออะไรก็ได้
นี่คือวิธี define และใช้ variables ใน Linux Shell scripts ตัวอย่างเหล่านี้ควรทำงานใน Linux Shells ยอดนิยม Bash และ Zsh
การประกาศ Bash Variables
Bash VARIABLES ARE UNTYPED โดย default คุณไม่สามารถ บอก มันได้ว่าทำอะไรกับตัวแปรได้บ้าง – มัน implied
โดยปืนทุกตัวแปรเก็บเป็น strings และจัดการตาม context เมื่อใช้ – หาก string มีตัวเลข จะถูก treat เป็นตัวเลขหากพยายาม increment กับมัน ฯลฯ
ด้านล่าง มีการประกาศตัวแปรหลายตัว – MY_STRING, MY_FILE_PATH, และ MY_NUMBER ทั้งหมดเป็น untyped variables
#!/bin/bash MY_STRING="Hello Linux!" MY_FILE_PATH=/path/to/my/file.txt MY_NUMBER=4
คลิกที่นี่เพื่อค้นหาเกี่ยวกับ #!
ไวยากรณ์คำสั่ง ‘declare’
โปรดทราบว่า declare เฉพาะสำหรับสภาพแวดล้อม Bash และอาจไม่มีหากคุณใช้ shell อื่น
ไวยากรณ์ของ declare มีดังนี้:
declare OPTIONS variable_name=variable_value
โปรดทราบว่า:
- OPTIONS เป็น optional และเลือกได้จากตารางด้านล่างเพื่อตั้งค่าประเภทหรือพฤติกรรมของตัวแปร
- variable_name คือชื่อตัวแปรที่ต้องการ define/declare
- variable_value คือค่าของตัวแปรดังกล่าว
| declare option | ความหมาย | |
|---|---|---|
| -r | readonly | ประกาศตัวแปร read-only |
| -i | integer | ประกาศตัวแปร integer |
| -a | array | ประกาศตัวแปรเป็น array |
| -f | function(s) | ประกาศตัวแปรเป็น function |
| -x | export | ประกาศตัวแปรที่สามารถ export ออกนอก script |
ตัวอย่างคำสั่ง ‘declare’
นี่คือการประกาศ string variable (ไม่มี OPTIONS) ตามด้วย integer variable
#!/bin/bash declare MY_STRING="Hello Linux!" declare -i MY_NUMBER=4
ตอนนี้ หากคุณพยายาม assign ค่าของ MY_STRING ให้ MY_NUMBER, MY NUMBER จะกลายเป็น 0 – เพราะ string ไม่ evaluate เป็นตัวเลข
declare ให้ typing functionality พื้นฐานเท่านั้น จึงไม่ควรพึ่งพามากนัก – แต่มีประโยชน์สำหรับ确保ตัวแปรเก็บได้แค่ประเภทเฉพาะ
การใช้ Bash Variables
เพื่อใช้ตัวแปร ให้ prefix ด้วย $ (dollar sign) เช่น:
#!/bin/bash MY_STRING="Hello Linux!" MY_FILE_PATH=/path/to/my/file.txt MY_NUMBER=4 echo $MY_STRING # Prints the string variable touch $MY_FILE_PATH # Create or update the file at the given path MY_NUMBER=$(($MY_NUMBER+1)) # Increment MY_NUMBER by evaluating a mathmatical formula
สังเกตการใช้คำสั่ง touch เพื่อสร้างหรือ update ไฟล์ในสคริปต์ข้างต้น
สังเกตการใช้ double brackets (()) – นี่บอก Bash ให้ evaluate statement ภายใน – มิฉะนั้น MY_NUMBER จะได้ string value ที่มีตัวอักษร “$MY NUMBER+1”
การใช้ Variables ใน Strings
บางครั้งคุณอาจต้องใช้ค่าตัวแปรใน string – เช่น หากเก็บ file paths จาก user input
เพื่อ include variable ใน string ให้ใช้มันใน wrapped quotes ของอีก string:
echo "This is my string: $MY_STRING"
Local Variables
Local variables พร้อมใช้งานเฉพาะใน scope ที่สร้างเท่านั้น คือ ภายใน function หรือ loop เฉพาะที่ defined
#!/bin/bash function myFunction { local MY_STRING="This string is only available here, in this function" echo $MY_STRING } echo $MY_STRING # Will print nothing, as the variable was defined locally within a function