Thuta Learning
ရှာဖွေရန်
IntermediateDevOps & Toolsbeginner

Shell Scripting: if, loop, function

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Shell Scripting: if, loop, function ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • Terminal ထဲမှာ ကိုယ်တိုင် command ကို စမ်းသုံးတတ်အောင် လုပ်မယ်
  • Real server/project မှာ ဒီ command ဘယ်လို အသုံးဝင်သလဲ ချိတ်မြင်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

if statement က condition အလိုက် ရွေးချယ်ဆုံးဖြတ်ပေးပါတယ် — if [ condition ]; then ... fi ပုံစံနဲ့ ရေးရပြီး [ ] ရဲ့ ဘေးဘက်မှာ space ချန်ထားရမယ်ဆိုတာ syntax rule တစ်ခုပါ (space မထားရင် error ဖြစ်ပါတယ်)။ for loop က list တစ်ခုထဲက item တစ်ခုချင်းစီအတွက် command ကို ထပ်ခါထပ်ခါ run ပေးပါတယ် — folder ထဲက ဖိုင်တိုင်းအတွက် အလုပ်တစ်ခု လုပ်ချင်တဲ့အခါ အသုံးများပါတယ်။ Function ကတော့ command အစုအဝေးကို နာမည်တစ်ခုပေးပြီး ပြန်သုံးနိုင်အောင် ထုပ်ထားတာပါ — function_name() { commands } ပုံစံနဲ့ ဖန်တီးပြီး function_name လို့ ခေါ်ရုံနဲ့ ထဲက command အားလုံး run ပါလိမ့်မယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

Backup script တစ်ခုမှာ folder ရှိ/မရှိ ဦးစွာ if [ -d "$FOLDER" ] ဖြင့် စစ်ပြီး ရှိမှ backup ဆက်လုပ်တာမျိုး common ပါတယ် (-d = directory ရှိမရှိစစ်, -f = file ရှိမရှိစစ်)။ for file in *.txt; do echo "Processing $file"; done ဆိုရင် folder ထဲက .txt ဖိုင်တိုင်းအတွက် message တစ်ကြောင်းစီ print လုပ်ပါလိမ့်မယ် — real-world script တွေမှာ echo နေရာမှာ backup, compress, upload command တွေ အစားထိုးလို့ရပါတယ်။ Function တွေ ဖန်တီးထားရင် script ရှည်ရှည်တွေမှာ code duplicate ရေးစရာ မလိုတော့ပါဘူး။

အတူတူ terminal ထဲ စမ်းမယ်

bash
#!/bin/bash
FOLDER="backups"

if [ -d "$FOLDER" ]; then
  echo "$FOLDER exists"
else
  mkdir "$FOLDER"
  echo "Created $FOLDER"
fi

for file in *.txt; do
  echo "Found: $file"
done

greet() {
  echo "Hello, $1!"
}
greet "Linux"
You should see
'Created backups' (folder မရှိသေးရင်) သို့မဟုတ် 'backups exists' ပြသည်, ပြီးရင် .txt ဖိုင်များကို list ချပြီး 'Hello, Linux!' နဲ့ ပြီးဆုံးမည်။

၅ မိနစ် စမ်းကြည့်

check-file.sh ဆိုတဲ့ script ရေးပါ — argument (ဖိုင်နာမည်) တစ်ခု လက်ခံပြီး ဖိုင်ရှိ/မရှိကို if statement နဲ့ ပြောပါ။

သတိလေးတစ်ချက်

for loop ထဲမှာ rm command ထည့်ထားရင် script run လိုက်တာနဲ့ ဖိုင်များစွာကို တစ်ချက်တည်း အလိုအလျောက် ဖျက်နိုင်ပါတယ် — dangerous command ပါတဲ့ loop ကို run ခင် echo နဲ့ dry-run အရင်စမ်းပါ။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • if [$FOLDER] လို [ ] ဘေးက space မထားလို့ syntax error ဖြစ်ခြင်း — if [ $FOLDER ] လို space ထားမှ မှန်ပါတယ်
  • Variable ကို quote ("$FOLDER") မထားလို့ space ပါတဲ့ folder name အတွက် error ဖြစ်ခြင်း

အခု ကိုယ်တိုင် စမ်းကြည့်

check-file.sh ဆိုတဲ့ script ရေးပါ — argument (ဖိုင်နာမည်) တစ်ခု လက်ခံပြီး ဖိုင်ရှိ/မရှိကို if statement နဲ့ ပြောပါ။

You'll know it worked when: 'Created backups' (folder မရှိသေးရင်) သို့မဟုတ် 'backups exists' ပြသည်, ပြီးရင် .txt ဖိုင်များကို list ချပြီး 'Hello, Linux!' နဲ့ ပြီးဆုံးမည်။

Shell Scripting: if, loop, function | Thuta Learning