SHELL四則運算和比較

來源:互聯網
上載者:User

                                                               四則運算和比較

1.操作符(let 標誌符)

+       加法-       減法*       乘法/       除法**      冪運算        3 let "z=5**3"%       模數        bash$ expr 5 % 3
2.比較符 (注意[ ]和變數之間需要空格" ")           整型比較符            -eq     等於,如:if [ "$a" -eq "$b" ]  //注意空格
-ne     不等於,如:if [ "$a" -ne "$b" ]-gt     大於,如:if [ "$a" -gt "$b" ]-ge     大於等於,如:if [ "$a" -ge "$b" ]-lt     小於,如:if [ "$a" -lt "$b" ]-le     小於等於,如:if [ "$a" -le "$b" ]<       小於(需要雙括弧),如:(("$a" < "$b"))<=      小於等於(需要雙括弧),如:(("$a" <= "$b"))>       大於(需要雙括弧),如:(("$a" > "$b"))>=      大於等於(需要雙括弧),如:(("$a" >= "$b")) 字串比較=       等於,如:if [ "$a" = "$b" ]==      等於,如:if [ "$a" == "$b" ],與=等價        注意:==的功能在[[]]和[]中的行為是不同的,如下:        1 [[ $a == z* ]]    # 如果$a以"z"開頭(模式比對)那麼將為true        2 [[ $a == "z*" ]] # 如果$a等於z*(字元匹配),那麼結果為true        3         4 [ $a == z* ]      # File globbing 和word splitting將會發生        5 [ "$a" == "z*" ] # 如果$a等於z*(字元匹配),那麼結果為true        一點解釋,關於File globbing是一種關於檔案的速記法,比如"*.c"就是,再如~也是.但是file globbing並不是嚴格的Regex,雖然絕大多數情況下結構比較像.!=      不等於,如:if [ "$a" != "$b" ]        這個操作符將在[[]]結構中使用模式比對.<       小於,在ASCII字母順序下.如:        if [[ "$a" < "$b" ]]        if [ "$a" \< "$b" ]        注意:在[]結構中"<"需要被轉義.>       大於,在ASCII字母順序下.如:        if [[ "$a" > "$b" ]]        if [ "$a" \> "$b" ]        注意:在[]結構中">"需要被轉義.        具體參考Example 26-11來查看這個操作符應用的例子.-z      字串為"null".就是長度為0.-n      字串不為"null"        注意:        使用-n在[]結構中測試必須要用""把變數引起來.使用一個未被""的字串來使用! -z        或者就是未用""引用的字串本身,放到[]結構中(見Example 7-6)雖然一般情況下可        以工作,但這是不安全的.習慣於使用""來測試字串是一種好習慣.

3.eg

  #./bin/bash
#擷取英文月份對應的數字月份
getmonthofenglish()
{
        case "$1" in
        "Jan") msg_month=1;;
        "Feb") msg_month=2;;
        "Mar") msg_month=3;;
        "Apr") msg_month=4;;
        "May") msg_month=5;;
        "Jun") msg_month=6;;
        "Jul") msg_month=7;;
        "Aug") msg_month=8;;
        "Sept") msg_month=9;;
        "Oct") msg_month=10;;
        "Nov") msg_month=11;;
        "Dec") msg_month=12;;
        esac
}
# 判斷是否有到期簡訊,有調用C刪除簡訊函數
del_overtime_sms()
{
        num=`ipcs -q|grep "$1"|awk '{print $6}'`
        if (( "$num" > "1" )); then
                ipcs -q|grep "$1"|awk '{print $2,$6}'>overtimesms.ini
                ./del_overtime_sms         //shell中調用C函數的結果
        else
                echo "訊息佇列中沒有到期的簡訊"
        fi
}
#擷取當前月份對應的天數
cd /mas/shell/zhangweiatest/clear_overtime_sms
mday=`./getmonthofday`
echo "當前月份前一個月對應的天數=$mday"

#擷取系統時間對應的年,月
buff=`date|awk '{print $2,$3}'`
now_month=${buff:0:1}
now_day=${buff:3:1}

#擷取當前隊列的存活時間
ipcs -qt|awk '{print $1,$3,$4}'>msglivelytime.ini
sed -n '4,$p' msglivelytime.ini >msglivelytime1.ini   //擷取從第四行開始到結束的字元
mv msglivelytime1.ini msglivelytime.ini

while read msgid msg_month msg_day
do
        echo
        echo "訊息佇列ID=$msgid建立的時間為:$msg_month月$msg_day日"
        echo "系統時間為$now_month月的第$now_day天"
        getmonthofenglish "$msg_month"
        let "new_month = $msg_month + 1"
        if [ "$msg_month" = "Not" ]; then     //為空白NULL
                echo "隊列安全"
        elif [ "$msg_month" = "" ]; then       //空行
                echo "NULL"
        elif [ "$msg_month" = "$now_month" ]; then
                let "msg_day1 = $msg_day + 2"
                if (( "$now_day" >= "$msg_day1" )); then
                        if (( "$msg_day" < "$mday" )); then
                                echo "訊息佇列不安全"
                                del_overtime_sms "$msgid"
                        fi
                fi
        elif [ "$now_month" = "$new_month" ]; then
                let "now_day1 = $now_day + $mday"
                let "msg_day1 = $msg_day + 2"
                echo "now_day1=$now_day1,msg_day1=$msg_day1"
                if (( "$now_day1" >= "$msg_day1" )); then
                       # if (( "$msg_day1" < "$mday" )); then
                                echo "訊息佇列不安全"
                                del_overtime_sms "$msgid"
                       # fi
                fi
        elif (( "$now_month" > "$new_month" )); then
                echo ""$msg_month" > "$now_month""
                del_overtime_sms "$msgid"
                echo "訊息佇列不安全"      
        else
                echo "msg queue safe"
        fi
done < msglivelytime.ini

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.