နားလည်ထားရမယ့် အချက်
Shell script ဆိုသည်မှာ ကျွန်ုပ်တို့ terminal တွင် ရိုက်နေကျ command များအတိုင်းပါဝင်သော text ဖိုင်တစ်ခုသာဖြစ်ပြီး၊ တစ်ခုပြီးတစ်ခု အစဉ်လိုက် run နိုင်ရန် သိမ်းထားခြင်းသာဖြစ်သည်၊ လက်နှင့် ထပ်ခါထပ်ခါ ရိုက်နေစရာမလိုတော့ပါ။ Command များကို shell history ပေါ်တွင်သာ မှီခိုမနေဘဲ file တစ်ခုအဖြစ် တရားဝင် ပြောင်းလဲရခြင်း အကြောင်းရင်းမှာ history ဆိုသည်မှာ order မရှိ၊ ပျောက်ဆုံးရလွယ်ပြီး ကိုယ့် machine တစ်ခုတည်းအတွက်သာ ဖြစ်နေချိန်၊ script တစ်ခုမှာမူ မည်သူမဆို ဖတ်နိုင်၊ review လုပ်နိုင်၊ အတူတူပင် ထပ်ခါ run နိုင်သော တမင်ဖန်တီးထားသည့် artifact တစ်ခု ဖြစ်ခြင်းကြောင့်ဖြစ်သည်။ Shebang line ဖြစ်သော `#!/usr/bin/env bash` သည် ဖိုင်တစ်ခုကို တိုက်ရိုက် execute လုပ်သောအခါ kernel က ပထမဆုံး စစ်ဆေးသော အရာဖြစ်သည် — ဖိုင်၏ ပထမဆုံးလိုင်းတွင် `#!` ပါရှိလျှင် ကျန်ဖိုင်ကို ဘယ် interpreter ဖြင့် ဖတ်ရမည်ကို OS ကို ပြောပြသည်၊ `bash` ကို `/bin/bash` ကဲ့သို့ path အတိအကျ hardcode မလုပ်ဘဲ `env` ကို သုံးကာ `PATH` ပေါ်မှ ရှာစေခြင်းက script ကို portable ဖြစ်စေသည်၊ အကြောင်းမှာ bash သည် system တိုင်းတွင် တစ်နေရာတည်း မတည်ရှိသောကြောင့်ဖြစ်သည်။ Shebang အမှန်ရှိနေသည့်တိုင် `chmod +x` ဖြင့် executable bit ပေးမှသာ kernel က script ကို တိုက်ရိုက် run ခွင့်ပြုမည်ဖြစ်သည် — ထို့နောက် `./script.sh` က တစ်ကိုယ်တည်း အလုပ်လုပ်ပြီး၊ မပေးထားလျှင် `bash script.sh` ဟု တိုက်ရိုက်ခေါ်ရမည်ဖြစ်ပြီး ၎င်းသည် shebang ကို လုံးဝ ကျော်သွားသည် — အကြောင်းမှာ ကိုယ်တိုင်ကိုယ်ကျ interpreter ကို ဖော်ပြပြီးသားဖြစ်နေသောကြောင့်ဖြစ်သည်။ Scripting ၏ တကယ့်တန်ဖိုးမှာ command တစ်ခုချင်းစီ မဟုတ်ဘဲ၊ ထပ်ခါလက်နှင့် ရိုက်ရင်း (အလုပ်ရှုပ်ချိန် တခါတရံ) အမှားလုပ်တတ်သော အဆင့်များကို ယုံကြည်စိတ်ချရ၊ ပြန်စစ်နိုင်၊ team တစ်ခုလုံးနှင့် မျှဝေနိုင်သော အရာအဖြစ် ပြောင်းလဲပေးခြင်းပင် ဖြစ်သည်။
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
App တစ်ခုကို deploy လုပ်နေတယ်လို့ စဉ်းစားကြည့်ပါ၊ release တိုင်းမှာ command ငါးခုကို လက်နှင့် အမြဲ run နေရတယ် — code အသစ်ကို pull ဆွဲတာ၊ dependency များ install လုပ်တာ၊ test များ run တာ၊ service ကို restart လုပ်တာ၊ log များကို စစ်ကြည့်တာ။ အဲဒီ sequence ကို အကြိမ်တိုင်း လက်နှင့် ရိုက်နေရင် အဆင့်ကျော်တာ (အလုပ်ရှုပ်နေချိန်)၊ flag မှားရိုက်တာ၊ order မှားတာ၊ (သို့) terminal history ထဲက မှားယွင်းသော command ကို copy-paste လုပ်မိတာလို အမှားများ ဖြစ်တတ်ပါတယ်။ ဒီ command ငါးခုကို `deploy.sh` script တစ်ခုတည်းထဲ ထည့်လိုက်ရင် team ထဲက မည်သူမဆို — ပင်ပန်းနေသည် ဖြစ်စေ၊ အလျင်စလို ဖြစ်နေသည်ဖြစ်စေ — command တစ်ခုတည်း run ပြီး အမှန်ကန်ဆုံး sequence အတိအကျကို အကြိမ်တိုင်း ရရှိမှာ ဖြစ်ပါတယ်။ ဒီ lesson ရဲ့ ဥပမာကလည်း အလားတူပါပဲ — Alice၊ Bob၊ Carol အတွက် status line တစ်ခုစီကို လက်နှင့် echo ထုတ်နေမည့်အစား၊ script က name list ပေါ်တွင် တစ်ကြိမ်တည်း loop လုပ်ပြီး တသမတ်တည်း format ကျသော report ကို print ထုတ်ပေးသည် — team တစ်ခု၏ နေ့စဉ် လုပ်ငန်းစဉ်များပေါ်တွင် ကျင့်သုံးလိုက်လျှင် scripting ကို ဘာကြောင့် ပထမဆုံး သင်ယူထိုက်သလဲဆိုတာကို ပြသနေတဲ့ သေးငယ်တဲ့ automation ပါပဲ။
အတူတူ စမ်းရေးကြည့်မယ်
#!/usr/bin/env bash
# A simple script that automates a repetitive task:
# printing a formatted greeting for multiple users.
echo "Daily Standup Report"
echo "====================="
for user in Alice Bob Carol; do
echo "- $user: all tasks on track"
done
echo "Report generated."ဤ script ကို run လိုက်လျှင် အောက်ပါအတိုင်း ထွက်ပါမည်:
Daily Standup Report
=====================
- Alice: all tasks on track
- Bob: all tasks on track
- Carol: all tasks on track
Report generated.၅ မိနစ် စမ်းကြည့်
မိမိ မနက်တိုင်း လုပ်လေ့ရှိသော task သုံးခု (ဥပမာ email စစ်ခြင်း၊ calendar ကြည့်ခြင်း၊ build status စစ်ခြင်း) ကို တစ်ကြောင်းစီ print ထုတ်ပေးသော checklist script တစ်ခု ရေးပါ၊ run မလုပ်မီ chmod +x ဖြင့် executable ဖြစ်အောင် လုပ်ပါ။
သတိလေးတစ်ချက်
chmod +x လုပ်ဖို့ မေ့ပြီး './script.sh' က 'Permission denied' ပြသည့်အခါ ဘာဖြစ်လဲ မသိဖြစ်နေခြင်း
Shebang line ကို ချန်ထားခြင်း (သို့) path မှားရေးထားခြင်းကြောင့် script ကို bash အစား တခြား run လုပ်သော shell က run သွားခြင်း
GNU Bash Reference Manual — Bash / Shell Scripting