May 1, 2012

ကိန်းရှင်များ ၂

ပြီးခဲ့သော တစ်ခေါက်က Shell Script ၏ ကိန်းရှင်များအကြောင်းကို ဖော်ပြခဲ့၏။ Java C များကို ရင်းနှီးခဲ့သူများအတွက် Shell Script ၏ ကိန်းရှင်များ၏ အသုံးပြုပုံမှာ အနည်းငယ် ထူးဆန်းသလို ဖြစ်ပါလိမ့်မည်။ ဥပမာအားဖြင့် ကြိုတင်သတ်မှတ်ထားခြင်း မရှိသော ကိန်းရှင်တစ်ခုအား ကွန်ပိုင်းဘာသာရပ် တစ်ခုဖြစ်သော Java တွင် အသုံးပြုနိုင်ခြင်း မရှိပေ။ ${var:=new_var} ကို Java ဖြင့်ရေးမည် ဆိုလျှင် အတော်လေး ရေးရမည် ဖြစ်သည်။ ယခုတစ်ခေါက်တွင်လည်း ဘီရှဲ၏ ကိန်းရှင်များ အကြောင်းကို ဆက်လက် ဖော်ပြသွားပါဦးမည်။


အလိုအလျှောက် အသုံးပြုနိုင်သော ကိန်းရှင်များ


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

ကိန်းရှင် ရှင်းလင်းချက်
$? နောက်ဆုံးအသုံးပြုသွားသော ကွန်မန်း၏exit ရလဒ်။
$$ ရှဲ၏ ပရိုဆက်အိုင်ဒီ။
$! ရှဲမှ နောက်ဆုံးခေါ်ယူခဲ့သော Background Process ၏ Process ID
$0 ရှဲစကရစ်၏ အမည်။
$1-9 စကရစ်အား ခေါ်ယူရာတွင် အသုံးပြုခဲ့သော ပါရာမီတာများ။
$1 ပဋ္ဌမပါရာမီတာ
$9 ၉လုံးမြောက် ပါရာမီတာ
$# ရှဲစကရစ်အား ခေါ်ယူရာတွင် အသုံးပြုခဲ့သော ပါရာမီတာ အရေးအတွက်။ ပါရာမီတာ မပါပဲ ခေါ်ယူခဲ့ပါက ရလဒ်သည် 0 ဖြစ်ပေမည်။
$* စကရစ်အား ခေါ်ယူရာတွင် အသုံးပြုခဲ့သော ပါရာမီတာ လစ်။ "$*" ဟု အသုံးပြုပါက "$1 $2 ... $n" ဟု ဖော်ပြပါမည်။
$@ စကရစ်အား ခေါ်ယူရာတွင် အသုံးပြုခဲ့သော ပါရာမီတာ လစ်။ "$@" ဟု အသုံးပြုပါက "$1" "$2" ... "$n" ဟု ဖော်ပြပါမည်။

test2-1.sh
#!/bin/sh

echo "Count of parameter is $#."
echo "Name of Script is $0."
echo "1st parameter is $1."
echo "2nd parameter is $2."
echo "Process ID of Script is $$."

echo "Test of \"\$*\""
for var1 in "$*"
do
        echo "Params : $var1"
done

echo "Test of \"\$@\""
for var2 in "$@"
do
        echo "Params : $var2"
done
အထက်ပါ test2-1.sh အား ပါမစ်ရှင်းပြောင်း၍ အလုပ်လုပ်ကြည့်စေပါက အောက်ပါအတိုင်း တွေ့မြင်ရမည် ဖြစ်၏။


နမှုနာ ရှဲအားခေါ်ယူရာတွင် sh test2-1.sh param1 param2 ဟု ပါရာမီတာ ၂လုံးသုံးကာ ခေါ်ယူကြည့်ပါသည်။ ရှဲ၏ အမည် ပါရာမီတာများ၊ ပရိုဆက်အိုင်ဒီများကို ဖော်ပြရာတွင် ရှင်းလင်းစွာနားလည် နိုင်ပါသည်။ သို့ရာတွင် $* နှင့် $@ ၏ ခြားနားပုံကို ကြည့်စေလိုပါသည်။

for ဝါကျကို အသုံးပြု၍ "$*" ကို အသုံးပြုကြည့်သောအကာ "param1 param2" ဟု ပါရာမီတာ တစ်လုံးအနေဖြင့် အသုံးပြုသွားပါသည်။ သို့ရာတွင် "$@" ကိုမှု "param1" "param2" ဟု တစ်လုံးခြင်း ခွဲခြားအသုံးပြုနိုင်ပုံကို တွေ့မြင်နိုင်ပါသည်။

$* နှင့် $@ တို့သည် ပါရာမီတာလစ်ကို ဖော်ပြတာခြင်းတူသော်လည်း ""ကို ဝန်းရန်အသုံးပြုခြင်းအားဖြင့် $* သည် ပါရာမီတာ တစ်လုံးအဖြစ်ပြောင်းလည်းပြီး၊ $@ မှာမူ လစ်အဖြစ်မှ ပြောင်းလည်းခြင်းမရှိပါ။


ကိန်းရှင်များအား ကွန်မန်းရလဒ်များဖြင့်အစားထိုးခြင်း

ကွန်မန်း၏ရလဒ်များအား ကိန်းရှင်၏တန်ဖိုးအဖြစ် အစားထိုးအသုံးပြုနိုင်ပါသည်။ ရှဲဘာသာရပ်တွင် ကွန်မန်းများ၏ အဖွင့်အပိတ်တွင် (`) ဖြင့် ဝန်းရန်ရေးသားပါက၊ ၎င်းကွန်မန်း၏ ရလဒ်သည် တန်ဖိုးအဖြစ်ပြန်လည် အစားထိုး အသုံးပြုနိုင်မည် ဖြစ်သည်။

test2-2.sh
#!/bin/sh

var=`date`

echo $var


var=`date` ဟု ရေးသားထားခြင်း အားဖြင့် ကိန်းရှင် var တွင် date ကွန်မန်း၏ ရလဒ်ကို အစားထိုးပါသည်။ ထို့ကြောင့် echo $var ဟု ရေးသားသောခါ date ကွန်မန်း၏ ရလဒ်ကို ဖော်ပြနိုင်ခြင်း ဖြစ်၏။ ကိန်းရှင် var ကို အစားမထိုးပဲလဲ၊ echo `date` ဟု ရေးသားရုံဖြင့် date ကွန်မန်း၏ ရလဒ်ကို ကွန်ဆိုးပေါ်တွင် ဖော်ပြပေးနိုင်မည် ဖြစ်၏။



ရှဲစကရစ်၏ အထူးစာလုံးများနှင့် စကားလုံးများအား ပေါင်းဆက်ခြင်း


အထူးစာလုံးများ

ပရိုဂရမ်မင်းဘာသာရပ်များတွင် အချို့သောစာလုံးများ ဒါမှမဟုတ် စကားလုံးများအား ပရိုဂရမ်အတွင်းတွင် အဓိပ္ပါယ်တစ်ခုခု အနေဖြင့် အသုံးပြုနေကြပါသည်။ ဤကဲ့သို့သော စာလုံးများအား အထူးစာလုံးများဟု ခေါ်ဆိုပြီး၊ စကားလုံး (String) များ အနေဖြင့် တိုက်ရိုက်အသုံးပြု၍မရပေ။ ထိုစာလုံးများအား ကျော်ပြီးသုံးမည်ဟု(Escape) သက်မှတ်ပြီးမှသာ String ဒါမှမဟုတ် Text အနေဖြင့် အသုံးပြုနိုင်မည် ဖြစ်သည်။

ရှဲဘာသာရပ်တွင် အသုံးပြုနေသော အထူးစာလုံးများမှာ အောက်ပါအတိုင်းဖြစ်၏။

; & ( ) | ^ < > ? * [ ] $ ` " ' { } [TAB] [SPACE]


ဘီရှဲဘာသာရပ်တွင် ဤကဲ့သို့ အထူးစာလုံးများအား Escape လုပ်ရာတွင် နည်းလမ်း၃မျိုးရှိပါသည်။
  1. နောက်ပြန်မျဉ်းစောင်း (\) အား အသုံးပြုခြင်း။ အထူးစာလုံး တစ်လုံးခြင်းဆိုပါက (\) စာလုံးကို အထူးစာလုံး၏ အရှေ့တွင် ရေးသားခြင်းအားဖြင့် အထူးစာလုံးအား Text စာလုံးအနေဖြင့် အသုံးပြုနိုင်ပါသည်။
  2. Single Quotation (') ဖြင့် ဝန်းရံခြင်း။ စာကြောင်းတစ်ခု ဒါမှမဟုတ် စကားလုံးတစ်လုံး အား (') ဖြင့် ဝန်းရံထားပါက အတွင်းရှိ အထူးစားလုံးများအား ပုံမှန် Text စာလုံးအဖြစ် ဖော်ပြပေးနိုင်မည် ဖြစ်သည်။
  3. Double Quotation (") ဖြင့် ဝန်းရံခြင်း။ စာကြောင်းတစ်ခု ဒါမှမဟုတ် စကားလုံးတစ်လုံး အား (") ဖြင့် ဝန်းရံထားပါက အတွင်းရှိ [$ ` \] မှလွဲသော အခြားသော အထူးစားလုံးများအား ပုံမှန် Text စာလုံးအဖြစ် ဖော်ပြပေးနိုင်မည် ဖြစ်သည်။ ဤနည်းအားဖြင့် $ ကွန်မန်း နှင့် \ စာလုံးများအား Text အဖြစ်အသုံးပြုလိုပါက (') ကို အသုံးပြု၍ မှုရင်း အထူးစာလုံးအဖြစ် အသုံးပြုလိုပါက (") ကို အသုံးပြုခြင်းဖြင့် ခွဲခြား အသုံးပြုနိုင်ပါသည်။

လက်တွေ့ ရေးသားကြည့်ပါဦးမည်။

test2-3.sh
#!/bin/sh

var="hello minlwin"
echo $var
echo "$var"
echo '$var'
echo \$var
echo '\$var'




စာလုံးများအား ပေါင်းဆက်ခြင်း


ပရိုဂရမ်မင်းဘာသာရပ်အပေါ် မှုတည်၍ Text ဒါမှမဟုတ် String စာလုံးများအား ပေါင်းစပ်ပုံ အမျိုးမျိုးကွဲခြားပါသည်။ လူသိများသော JavaScript ဘာသာရပ်တွင် + ကို အသုံးပြု၍ String တစ်ခုနှင့် တစ်ခုကို ပေါင်းစက်နိုင်ပါသည်။ Java ဘာသာရပ်တွင်မှု + ကို သော်၎င်း၊ StringBuilder ဒါမှမဟုတ် StringBuffer ကလပ်စ်များ၏ အော့ဘဂျက်များကို အသုံးပြု၍ စာလုံးများအား ပေါင်းဆက်၍ စာလုံးတစ်လုံးအနေဖြင့် အသုံးပြုနိုင်ပါသည်။ သို့ရာတွင် B Shell ဘာသာရပ်တွင်မှု အထွေအထူး ဘာမှရေးသားစရာမလိုပဲ ဒီအတိုင်း စာလုံးနှစ်လုံးကို ဘေးချင်းယှဉ်ရေးသားရုံဖြင့် စာလုံးနှစ်လုံးအား တစ်လုံးအဖြစ်အသုံးပြုနိုင်ပါသည်။ လက်တွေ့ရေးသားကြည့်ပါမည်။

test2-4.sh
#!/bin/sh

VAR1="hello"
VAR2="Min Lwin"

echo $VAR1 $VAR2

echo "How are" "you?"



ဆက်ပါဦးမည်။ လေးစာစွာဖြင့်။

မင်းလွင်

No comments:

Post a Comment