AScript文法與變數參考

更新時間:
Copy as MD

AScriptALB推出的可程式化指令碼,用於實現自訂轉寄規則。

文法規則

重要

AScript全文不允許出現任何雙引號。

文法

規則

注釋

以#開頭的當前行後續內容,均為注釋。例如:# this is annotation

標識符

  • 由字母、數字、底線組成,數字不能開頭,區分大小寫。

  • 變數名(內建、自訂)和函數名(內建、自訂)均遵守標識符規則。

資料類型

  • 字串

    字面常量:使用單引號括起來,例如:'hello, AScript'

  • 數字

    字面常量:十進位數字,例如:10、-99、1.1。

  • 布爾值

    字面常量:true、false。

  • 字典

    字面常量如下:

    • []:空

    • ['key1', 'key2', 100]

      • 1 -> 'key1'

      • 2 -> 'key2'

      • 3 -> 100

    • ['key1' = 'value1', 'key2' = 1000]

      • 'key1' -> 'value1'

      • 'key2' -> 1000

變數

  • 定義

    賦值即定義。

  • 使用

    • 內建和自訂變數,均由變數名進行引用。

      • 引用內建變數:host

      • 引用自訂變數:seckey

    • 為強調變數的內建屬性,可通過$進行引用。

      引用內建變數:$host

    • 自訂變數的名稱不能與內建變數同名。

      內建變數,請參見下方內建變數表

運算子

  • = :賦值運算子

    • 例如:seckey = 'ASDLFJ234dxvf34sDF'

    • 例如:seckeys = ['key1', 'key2']

  • - :負號運算子

    例如:inum = -10

  • 對各資料類型的操作,不再另行支援運算子,均由內建函數支援,請參見AScript內建函數概述

語句

  • 條件判斷語句

    if condition {   
       ...
    }
    
    if condition1 {   
       if condition2 {
            ...
       }
    }
    
    if condition {
       ...
    } else {
       ...
    }
  • 語句解釋

    • condition可由如下文法元素組成:

      • 字面值

      • 變數

      • 函數調用

    • body部分

      • 允許空body。

      • 允許多語句:一行一條語句。

    • 支援多層嵌套

    • CodingStyle

      文法強制要求左大括弧跟隨在if condition之後,並且同行。

函數

  • 定義文法

    def 函數名(參數列表) {
        ...
    }
  • 定義說明

    • 形參列表

      • 允許無參。

      • 允許多參:由逗號分隔。

    • 函數體部分

      • 允許空body。

      • 允許多語句:一行一條語句。

      • 傳回值:支援return語句。

    • CodingStyle

      文法強制要求左大括弧跟隨在def函數名(參數列表)之後,並且同行。

  • 函數調用

    無論內建、自訂函數,均通過函數名(參數列表)進行調用。

內建變數表

  • 內建變數名前的貨幣符號($)僅為強調其內建變數屬性,刪除後不影響使用。

  • 內建變數不允許擔當左值,即內建變數不允許被賦值。

  • 每條AScript規則中最多支援使用200個全域變數,局部變數不限。如果全域變數超過200個請自訂函數,並在函數中以局部變數的形式使用全域變數。

內建變數名

含義

對應Nginx原生變數

$arg_{name}

Query String中的參數name值。Query String表示HTTP請求中的請求參數。

ngx.var.arg_{name}

{name}中出現的串連號(-),需要使用底線(_)替代,例如:X-USER-ID對應為$arg_x_user_id

$http_{name}

要求標頭中的name值。

ngx.var.http_{name}

{name}中出現的串連號(-),需要使用底線(_)替代,例如:X-USER-ID對應為$http_x_user_id

$cookie_{name}

請求cookie頭中的name值。

ngx.var.cookie_{name}

{name}中出現的串連號(-),需要使用底線(_)替代,例如:X-USER-ID對應為$cookie_x_user_id

$scheme

協議類型。

ngx.var.scheme

$server_protocol

協議版本。

ngx.var.server_protocol

$host

原始host。

ngx.var.host

$uri

原始URI。

ngx.var.raw_uri

$args

$args表示當前HTTP請求的全部請求參數,但不包含問號(?)。例如:http://www.a.com/1k.file?k1=v1&k2=v2

  • $arg_k1可以獲得對應的v1值。

  • $args可以獲得整個請求參數字串,即k1=v1&k2=v2,不包括問號(?)。

ngx.var.args

$request_method

要求方法。

ngx.var.request_method

$request_uri

uri+'?'+args的內容。

ngx.var.request_uri

$remote_addr

客戶的IP地址。

ngx.var.remote_addr