ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
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 ထဲ စမ်းမယ်
#!/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"'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 အရင်စမ်းပါ။