Biểu thức là sự kết nối các biến, các so sánh và các giá trị bạn kết nối lại với nhau cho ra kết quả. Một biểu thức có thể kiểm tra các giá trị, các chuỗi thay đổi. Biểu thức là sự kết hợp của các biến, các phép so sánh, các giá trị mà chúng ta đặt cùng nhau để cho ra một giá trị nào đó. Một biểu thức có thể kiểm tra giá trị, thay đổi chuỗi, hoặc thực thi các phép tính toán. Giả sử chúng ta có một biến là COUNT, đơn giản chúng ta có có thể có hai biểu thức là “COUNT cộng 1” và “COUNT chia 2”. Mỗi biểu thức sẽ có một kết quả hoặc giá trị khác nhau, nó phụ thuộc vào giá trị mà biến đem lại.
Trong asterisk các biểu thức luôn bắt đầu bằng dấu dollar và được đóng mở ngoặc bằng dấu ngoặc vuông như sau:
$[expression]
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 83 -
$[${COUNT} + 1] $[${COUNT } / 2]
Khi mà asterisk phát hiện một biểu thức trong dialplan, nó sẽ thay thế toàn bộ biểu thức bằng giá trị của kết quả. Điều này rất quan trọng để lưu ý rằng nó sẽ thực hiện biểu thức sau khi đã thay thế giá trị của biến. Để giải thích rõ hơn cho ý này, chúng ta sẽ xem đoạn code sau:
Cần lưu ý rằng khi mà chúng ta gán một biến, chúng ta có thể gọi chúng bằng tên của nó, nhưng khi mà chúng ta sử dụng giá trị của biến, chúng ta cần sử dụng dấu dollar và dấu ngoặc ở tên biến.
exten => 321,1,Set(COUNT=3)
exten => 321,2,Set(NEWCOUNT=$[${COUNT } + 1]) exten => 321,3,SayNumber(${NEWCOUNT})
Trong lệnh thực thi thứ nhất chúng ta gán giá trị 3 cho biến COUNT.
Trong lệnh thực thi thứ hai, chỉ có ứng dụng set() được sử dụng nhưng có 3 sự kiện xảy ra:
- Asterisk thay thế ${COUNT} với số 3 trong biểu thức. Biểu thức sẽ trở j kthành:
exten => 321,2,Set(NEWCOUNT=$ [3 + 1])
- Tiếp đến, Asterisk thực thi biểu thức, cộng một với 3, và thay thế nó với giá trị tính toán được là 4:
exten => 321,2,Set(NEWCOUNT=4)
- Cuối cùng, giá trị 4 được gán cho biến NEWCONT bởi ứng dụng SET() Câu lệnh thứ ba đơn giản là thực hiện ứng dụng saynumber(), có chức năng đọc giá trị hiện tại của biến ${NEWCOUNT} (được gán giá trị 4 trong câu lệnh thứ hai).
*Các phép so sánh:
Khi chúng ta tạo một dialplan asterisk, chúng ta đã viết một loại code với một ngôn ngữ đặc biệt. Điều này có nghĩa là ngôn ngữ lập trình asterisk cũng có các ký hiệu ngôn ngữ được gọi là toán tử cho phép chúng ta vận dụng với các biến.
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 84 -
Các loại toán tử có thể có trong asterisk:
*Toán tử boolean:
Các toán tử này trả về giá trị đúng của của phát biểu. Trong ngôn ngữ máy tính, rất cần có phát biểu có cái gì đó hoặc không có gì (0 hoặc 1, đúng hoặc sai, bật hoặc tắt v.v). Các toán tử Boolean như là:
- expr1 | expr2:
Toán tử này ( được gọi là or) trả về giá trị expr1 nếu phát biểu đúng ( không phải là một chuỗi trống, cũng không phải là số 0). Nếu ngược lại thì nó sẽ trả về giá trị của expr2.
- expr1 & expr2:
Toán tử này (được gọi là “and”) trả về giá trị của biểu thức 1 nếu cả hai biểu thức 1 và 2 đúng (không trả về chuỗi trống mà cũng không trả về giá trị 0). Ngược lại nó trả về giá trị 0.
- expr1 {=, >, >=, <, <=, !=} expr2:
Những toán tử này trả về kết quả của 1 số nguyên so sánh nếu cả hai biểu thức điều là số nguyên; nếu không thì nó sẽ trả về kết quả của chuỗi so sánh. Kết quả của mỗi phép so sánh là 1 nếu mối liên hệ của hai biểu thức là đúng hoặc 0 nếu mối liên hệ của chúng là sai. ( Nếu chúng ta sử dụng so sánh chuỗi, nó sẽ được hoàn thành sao cho phù hợp nhất với việc cài đặt hiện tại trong hoạt động của hệ thống).
*Toán tử toán học:
Để thực hiện tính toán, chúng ta có thể thực hiện như sau: - expr1 {+, -} expr2
Các toán tử này sẽ trả về kết quả của việc cộng hoặc trừ các giá trị của biểu thức
- expr1 {*, /, %} expr2
Các toán tử sẽ trả về kết quả của việc nhân, chia số nguyên hoặc là phần dư còn lại của việc thực hiện biểu thức.
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 85 -
Asterisk phân tích cú pháp rất đơn giản, nó yêu cầu chúng ta cần có ít nhất một khoảng trống giữa toán tử và các giá trị. Thường thì câu lệnh sau sẽ không thực hiện được như mong đợi:
exten => 123,1,Set(TEST=$[2+1])
Điều này sẽ gán biến test với chuỗi “2+1”, thay vì gán cho nó giá trị ba. Thực tế cần phải có một khoảng trống giữa toán tử, giống như sau:
exten => 234,1,Set(TEST=$[2 + 1])
Để móc nối các biến với nhau, đơn giản đặt chúng trong biểu thức, như:
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 86 -
Chương 5:
MÔ HÌNH THỰC HIỆN
Mô hình mạng điện thoại này được thực hiện đáp ứng cho các doanh nghiệp nhỏ, thực hiện dựa trên cơ sở hạ tầng mạng sẵn có của doanh nghiệp.