May 31, 2012

B Shell Functions

စာဖတ်သူများက ထင်ကြပေမည်။ Java အကြောင်းလည်းမဟုတ်ပါလားဟု။ အကြောင်းရှိပါသည်။ Servlet နှင့် JSP ကို အစပြု၍ Enterprise Java အကြောင်းကို လွယ်ကူစွာ ဖော်ပြနေခဲ့၏။ သို့ရာတွင် Enterprise ဟုဆိုပါက အချက်အလက်များကို စနစ်တကျအသုံးပြုနိုင်ရန် လိုအပ်၏။ ဤနေရာတွင် Database ကို ချန်ထား၍မရပေ။ ထို့ကြောင့် JSP ကို ခေတ္တရပ်ထား၍ Database နှင့် JDBC ကို မိတ်ဆက်ရန် ကြံစည်ပါသည်။

Database အနေဖြင့် အခြေခံမှာ MySQL ကို အသုံးပြုရန် စီစဉ်ထားပြီး၊ Server Application များရေးလျှင် Unix Server များကို ရင်းနှီးထားပါက အစဉ်ပြေမည် ဖြစ်သည်။ လုပ်မယ့်လုပ် Linux ပေါ်ရှိ MySQL ကို အသုံးပြု၍ Database ၏ အခြေခံကို မိတ်ဆက်ရန် အကြံရပါသည်။ ထို့ကြောင့် Linux ကွန်မန်းလိုင်းပေါ်တွင် ပရိုဂရမ်ရေးသားခြင်းကို ရင်းနှီးထားစေရန် ရည်ရွယ်၍ B Shell အကြောင်းကို စရေးနေခဲ့ခြင်း ဖြစ်ပါသည်။


ပြန်လည် အသုံးပြုနိုင်ရန် အတွက် ဖန်ရှင်


ကျွှန်တော်သည် B Shell နှင့် ပတ်သက်ပြီး အခြေခံ ရေးသားပုံတို့ကို ဖော်ပြလာခဲ့သည်မှာ ဤအကြိမ်နှင့် ဆိုလျှင် ၅ ကြိမ်မြောက်ကို ရောက်ခဲ့ပါပြီ။ B Shell ဆိုသည်မှာ အဘယ်နည်း၊ B Shell တွင် အသုံးပြုသော ကိန်းရှင်များနှင့် အခြေအနေပေါ်မှုတည်၍ ပြောင်းလည်း အလုပ်လုပ်စေနိုင်သော Control ဝါကျများကို နမှုနာများနှင့် တကွ လွယ်ကူစွာ မိတ်ဆက်ခဲ့ပါသည်။

ဤတစ်ခေါက်တွင် B Shell တွင် အသုံးပြုသော ဖန်ရှင်အကြောင်းကို ဖော်ပြပါမည်။ Shell ပရိုဂရမ်မင်း အကြောင်းကို လေ့လာသူသည် အခြားသော ပရိုဂရမ်မင်း ဘာသာတစ်ခုခုကို လေ့လာပြီးသူ ဖြစ်ပါလိမ့်မည်။ အခြားသော ဘာသာရပ်များတွင် Function, Method အစရှိသည့် အမည်အမျိုးမျိုးဖြင့် ခေါ်ဆိုသော လုပ်ဆောင်ချက်များကို Shell ဘာသာရပ်တွင်လည်း အသုံးပြုနိုင်ပါသည်။ ရေးသားပုံမှာ ကွာခြားသော်လည်း သဘောတရားမှာမူ အတူတူဖြစ်ပါသည်။

ဆိုကြပါစို့၊ ကျွှန်တော်တို့ ရေးသားထားသော ပရိုဂရမ်တစ်ခုအတွင်းတွင် လော့ရေးနေသော အပိုင်းများ ရှိပါလိမ့်မည်။ ပုံမှန်အားဖြင့် ရေးလိုသည့်နေရာများတွင် တိုက်ရိုက်ရေးရင်လည်း ဖြစ်ပါသည်။ သို့ရာတွင်ပရိုဂရမ် တစ်ခုအတွင်းတွင် တူညီသော အရာများအား အကြိမ်ကြိမ်ရေးလိုသည့်အခါမျိုးတွင် တူညီသော အစီအစဉ်များအား တနေရာထဲတွင် စုရေးထားပြီး ကွဲခြားသည့်နေရာများကိုသာ ပါရာမီတာအဖြစ် ရယူရေးသားနိုင်ပါသည်။

လော့ရေးသည့်အခါတွင် ပရိုဂရမ်အစ၊ အဆုံး နှင့် ဘယ်နေရာရောက်ပြီ ဆိုသည့်အရာများအား လော့ဖိုင်အတွင်း တွင်ရေးသားပါမည်။ ရေးရမည့် သတင်း အချက်အလက်သာ ကွာခြားပါမည်။ ရေးရမည့်ဖိုင်၊ ပုံစံ၊ နှင့် အချိန်များအား ရေးထုတ်ရမည်မှာအတူတူပင်ဖြစ်၏။ ပြောင်းလည်းမည့် အကြောင်းအရာကို ပါရာမီတာ အဖြစ်ရယူပြီး တူညီသည့်နေရာများအား တစ်နေရာထဲတွင် စုရေးသားနိုင်ပါသည်။

ဤကဲ့သို့ စုဝေးထားသော အစီအစဉ် အစုအဝေးအား ဖန်ရှင်ဟု ခေါ်ဆိုပါသည်။


ဖန်ရှင်တစ်ခုအား ရေးသားပုံ


B Shell တွင်ဖန်ရှင် တစ်ခုအား ရေးသားပုံမှာ အောက်ပါအတိုင်း ဖြစ်ပါသည်။

ဖန်ရှင်၏အမည်() {
    ကွန်မန်းများ
}

နမှုနာတစ်ခု ရေးကြည့်ပါမည်။ show ဟု အမည်ရသော ဖန်ရှင်တစ်ခုကို ရေးကြည့်ပါမည်။ အတွင်းပိုင်းတွင် shell ကွန်မန်းဖြစ်သော ls -l ကို ရေးသားထားပါမည်။


ပြီးပါက show ဟု ခေါ်ဆိုကြည့်ပါမည်။ ls -l ကို အလုပ်လုပ်စေပြီး . နှင့် .. ဟု ဖော်ပြပေးပါသည်။
တဖန် touch somefile.txt ဟု ဖိုင်အလွတ် တစ်ခုကို တည်ဆောက်ပါမည်။ ပြီးပါက show ဟု ခေါ်ကြည့်သောအခါ . နှင့် .. အပြင် somefile.txt ကိုပါ ဖော်ပြနေသည်ကို တွေ့ရပါမည်။


ဖန်ရှင်အတွင်းမှ ပါရာမီတာများအား အသုံးပြုပုံ

အခြားသောဘာသာရပ်များ ကဲ့သို့ပင် B Shell ၏ ဖန်ရှင်တွင်လည်း ပါရာမီတာများကို အသုံးပြုနိုင်ပါသည်။ Shell မှာက ပါရာမီတာများကို အသုံးပြုရန် အထွေအထူး ရေးသားရန်မလိုအပ်ပေ။ Java ကဲ့သို့ Strong Type Programming ဘာသာရပ် များတွင် ပါရာမီတာများကို အသုံးပြုလိုပါက လုပ်ဆောင်ချက်တွင် ကြိုတင် ရေးသားထားရန် လိုအပ်ပါသည်။ B Shell မှာမူ ကြိုတင်ရေးသားရန် မလိုအပ်ပဲ Shell Script တွင် ရေးသားသကဲ့သို့ပင် $နှင့် အစပြုသော ပါရာမီတာများကို အသုံးပြုနိုင်ပါသည်။

ကျွှန်တော်တို့ အထက်တွင် ရေးသားထားသော show လုပ်ဆောင်ချက်အား ပြန်လည်ပြုပြင် ရေးသား ကြည့်ပါမည်။
show() {
    ls -l $1
}
ဤကဲ့သို့ ls -l $1 ဟု ရေးသားထားခြင်းအားဖြင့် နံပါတ်၁ ပါရာမီတာအား အသုံးပြုနိုင်မည် ဖြစ်ပါသည်။


အထက်ပါအတိုင်း show ဖန်ရှင်အား ရေးသားပြီး show ~ ဟု Home Directory အား ဖော်ပြကြည့်စေပါသည်။ ပါရာမီတာ ~ အား အသုံးပြု၍ ls -l ~ ကို ဖော်ပြပေးနေသည်ကို တွေ့ရပါလိမ့်မည်။

Shell ၏ အလိုအလျှောက်အသုံးပြုနိုင်သော ကိန်းရှင်များတွင် Shell Script အတွင်းတွင် အသုံးပြုနိုင်သော ပါရာမီတာများ အကြောင်းကို ရေးသားခဲ့ဘူးပါသည်။ သဘောတရားမှာ အတူတူပင်ဖြစ်သောကြောင့် ဤနေရာတွင် ပြန်လည် မရေးသားတော့ပါ။


ဖန်ရှင်၏ ရလဒ်

B Shell ဖန်ရှင်တစ်ခုတွင် ရလဒ်အား ခေါ်ယူရာသို့ ပြန်လည်ပေးပို့လိုပါက အခြားသောဘာသာရပ်များ ကဲ့သို့ပင် return ကို အသုံးပြုနိုင်ပါသည်။ ရေးသားရာတွင် ဖန်ရှင်၏ နောက်ဆုံး ကွန်မန်းအဖြစ်၎င်း၊ လော့ဂျစ်အတွင်း အနေအထားတစ်ခုကို ရောက်ရှိသွားသည့် အခါမျိုးတွင်၎င်း return အား ရေးသားနိုင်ပါသည်။ ပရိုဂရမ်အား အလုပ်လုပ်လာစေရင်း return နေရာသို့ရောက်ပါက နောက်ဆက်မလုပ်ပဲ ရလဒ်အား ခေါ်ယူသည့်နေရာဆီသို့ ပြန်ပို့ပေးမည်ဖြစ်သည်။
#!/bin/sh

twice() {
    RET=`expr $1 \* 2 2>/dev/null`

    if [ $? != 0 ]; then
        echo "Parameter $1 is not a number"
        exit -1
    fi

    return ${RET}
}

twice 29
echo "twice of 29 is" $?

twice bb
echo "twice of bb is" $?
အထက်ပါ ပရိုဂရမ်ထဲတွင် စာကြောင်း နံပါတ် ၄ တွင် RET ၏ တန်ဖိုးအား `expr $1 \* 2 2>/dev/null` ဟု နံပါတ်၁ပါရာမီတာအား ၂ဖြင့် မြှောက်ပြီး အစားထိုးပါသည်။ တဖန် စာကြောင်း ၆ တွင် if [ $? != 0 ]; then ဟု ပုံမှန်ပြီးဆုံးခြင်း မရှိပါက ပါရာမီတာ ၁သည် နံပါတ်မဟုတ်သောကြောင့် စာကြောင်း နံပါတ် ၈ တွင် exit -1 ဟု ပရိုဂရမ်အား ပြီးဆုံးစေမည် ဖြစ်သည်။ နောက်ဆုံးတွင် ရလဒ်အား return ${RET} ဟု ပြန်ပေးစေပါသည်။ ဤနည်းအားဖြင့် `expr $1 \* 2` အား လုပ်ဆောင်ခြင်းသည် ပုံမှန်ပြီးဆုံးပါက ရလဒ်အား ပြန်ပေးစေနိုင်မည် ဖြစ်ပါသည်။


အထက်ပါအတိုင်း twice ဖန်ရှင်၏ ရလဒ်အား ပြန်လည်အသုံးပြုနိုင်သည်ကို တွေ့ရပါလိမ့်မည်။ ထူးခြားသည်မှာ ရလဒ်အား $? ကိန်းရှင်အနေဖြင့် ရယူနေရခြင်း ဖြစ်ပါသည်။


ဆက်ပါဦးမည်
မင်းလွင်

No comments:

Post a Comment