Viết kịch bản Terminal Service - Phần 9

Viết kịch bản Terminal Service - Phần 1
Viết kịch bản Terminal Service - Phần 2
Viết kịch bản Terminal Service - Phần 3
Viết kịch bản Terminal Service - Phần 4
Viết kịch bản Terminal Service - Phần 5
Viết kịch bản Terminal Service - Phần 6
Viết kịch bản Terminal Service - Phần 7
Viết kịch bản Terminal Service - Phần 8

Brien M. Posey

Quản trị mạng - Trong phần trước của loạt bài này, chúng tôi đã kết thúc phần giới thiệu cho các bạn về cách tạo các file bản ghi có sử dụng các tên file động. Còn phần này, chúng tôi sẽ tiếp tục loạt bài này bằng cách chuyển sang một chủ đề khác, giới thiệu cho các bạn về cách xây dựng các menu trong kịch bản. Với mục đích đơn giản, menu mẫu mà chúng tôi sẽ sử dụng trong phần này tuyệt đối chưa có gì liên quan tới terminal services. Mặc dù vậy, trong phần sau của bài chúng tôi sẽ sử dụng các khái niệm đã được giới thiệu trong phần này và áp dụng chúng cho terminal services. Cho ví dụ như việc sử dụng các kỹ thuật mà chúng tôi giới thiệu cho bạn và một số kỹ thuật đã được giới thiệu trong các loạt bài trước, bạn có thể tạo một kịch bản để hiển thị tất cả các session của terminal server hiện đang ở trạng thái tích cực và sau đó cung cấp các tùy chọn menu để dừng một session nào đó.

Các thường trình con

Một trong những khái niệm quan trọng nhất mà chúng tôi muốn giới thiệu cho các bạn trong phần này đó chính là khái niệm thường trình con (subroutine). Trong một kịch bản, một thường trình con là một phần mã có thể được gọi từ một phần mã khác. Người ta thường sử dụng các thường trình con dựa vào các menu chọn. Cho ví dụ, bạn có thể thiết kế một kịch bản đề thực hienẹ một tính toán nào đó và sau đó thực thi một thường trình con dựa trên các kết quả thu được từ tính toán đó.

Việc tạo một thường trình con rất đơn giản. Chúng được định nghĩa bởi một dấu hai chấm (:) và tên thường trình con. Bạn có thể gọi chúng bằng cách sử dụng lệnh goto. Để giới thiệu cho các bạn về cách làm việc của các thường trình con, chúng tôi đã tạo một kịch bản đơn giản bên dưới, kịch bản này sẽ được sử dụng xuyên suốt trong phần này:

@echo off
set _car=D
:Loop
cls
Echo What is your favorite car:
Echo A: Lamborghini
Echo B: Ferrari
Echo C: Porsche
Echo.
Echo D: Quit
Echo.
Set /P _car=Please enter your choice:
if not "%_car%"=="" set _car=%_car:~0,1%
REM echo %_car%
If /i "%_car%"=="A" goto sub_lambo
If /i "%_car%"=="B" goto sub_ferrari
If /i "%_car%"=="C" goto sub_Porsche
if /I "%_car%"=="D" goto:eof
goto:loop
:sub_lambo
echo You chose a Lamborghini
goto:eof
:sub_ferrari
echo You chose a Ferrari
goto:eof
:sub_porsche
echo You chose a Porsche

Kịch bản trên tạo một menu rất đơn giản được thiết kế để hỏi người dùng về kiểu xe ưa thích của họ. Menu hiển thị một vài sự lựa chọn và sau đó người dùng nhập vào ký tự tương ứng với sự lựa chọn của họ. Sau khi người dùng đã thực hiện xong việc chọn, kịch bản sẽ thông báo cho họ biết rằng họ đã chọn mục gì. Có thể kịch bản trên chưa thực sự thú vị nhưng các bạn nên nhớ rằng chúng tôi muốn tạo một kịch bản đơn giản để có thể giới thiệu cho các bạn về các khái niệm một cách dễ hiểu nhất.

Nếu nhìn vào kịch bản, bạn sẽ thấy chúng tôi đã định nghĩa 4 thường trình con. Các thường trình ở đây là loop, sub_lambo, sub_ferrarisub_porsche. Bạn có thể thấy vị trí bắt đầu của mỗi thường trình con bởi dấu hai chấm đằng trước tên mỗi thường trình. Xuyên suốt kịch bản bạn sẽ thấy một số trường hợp sử dụng lệnh goto để gọi các thường trình con.Một thứ mà chúng tôi muốn giới thiên cho các bạn ở đây trước khi chuyển đi đó là có một vài lệnh trong file để gọi thường trình con có tên EOF. Chúng tôi thực sự đã không định nghĩa thường trình con này, tuy nhiên Windows lại mặc điịnh cho kịch bản biết về nó. Lệnh goto:EOF sẽ làm cho Windows dừng kịch bản bằng cách nhảy đến phần cuối của file.

Menu chi tiết hơn

Lúc này, chúng tôi đã giới thiệu cho các bạn về cách gọi các thường trình con, chúng tôi muốn giới thiệu cho các bạn từng dòng một và giải thích cách làm việc củanó. Dòng đầu tiên khá đơn giản, đó là lệnh @echo off. Lệnh này sẽ không cho Windows hiển thị tất cả các lệnh khi được thực thi.

Dòng thứ hai Set _car=D. Đây là lệnh gán biến có tên _car bằng một giá trị D. Lý do tại sao chúng tôi thực hiện điều này là vì phần bên dưới, kịch bản gồm có một số mã có thể làm cho kịch bản kết thúc nếu người dùng nhập vào D. Kịch bản được thiết kế như vậy để nếu người dùng không nhập bất cứ thứ gì và chỉ việc nhấn Enter thì kịch bản sẽ sử dụng giá trị mặc định là D, giá trị mà chúng tôi gán ở đây và sẽ kết thúc kịch bản.

Nếu những giải thích trên dường như khá lộn xộn thì có lẽ lược đồ sau sẽ giúp bạn dễ hiểu hơn điều đó. Bạn phải bỏ qua các mũi tên chỉ hướng vì tác giả trong bài này không biết cách điều khiển hướng mũi tên trong Visio. Tuy nhiên lược đồ sẽ cung cấp cho bạn một ý tưởng logic dễ hiểu cho kịch bản và cách các thường trình làm việc như thế nào.


Hình A: Lược đồ mô tả kịch bản

Giờ đây chúng ta đã gán giá trị cho các biến, dòng thứ ba trong kịch bản là dòng tạo một thường trình con có tên loop. Lý do tại sao chúng tôi thực hiện như vậy là vì để phòng trường hợp người dùng nhập vào một sự lựa chọn menu không hợp lệ, thì đầu vào của người dùng sẽ bị bỏ qua và kịch bản sẽ tự thiết lập lại và cung cấp cho người dùng một lựa chọn khác để nhập vào đầu vào hợp lệ.

Dòng thứ tư trong kịch bản hoặc dòng đầu tiên trong thường trình loop là CLS. Lệnh này sẽ có tác dụng xóa màn hình.

Những dòng tiếp theo của kịch bản là một loạt các lệnh echo để hiển thị các lựa chọn menu. Chỉ có một thứ khác thường trong phần kịch bản này là có hai dòng trong đó từ Echo được gắn theo ngay sau một dấu chấm. Các lệnh này sẽ chèn một dòng trắng vào văn bản trên màn hình.

Lệnh mà chúng ta sẽ bắt gặp là lệnh SET /P _car=Please enter your choice:. Trong Windows, lệnh Set /P sẽ làm cho Windows dừng và người dùng nhập vào đầu vào. Đầu vào được ghi vào biến danh nghĩa. Trong trường hợp này, biến sẽ là _car. Lệnh này cũng hiển thị đoạn “Please enter your choice:”.

Tiếp đến, kịch bản sẽ xử lý lệnh sau:

If not “%car%”==”” set _car=%_car:~0,1%

Đây là một trong những dòng đòi hỏi xử lý tinh tế hơn trong lệnh. Nó được thiết kế để phân tích cú pháp mà người dùng nhập vào ở đầu vào và làm hợp lệ hóa. Lệnh này cũng kiểm tra xem người dùng đã nhập vào gì đó hay không. Nếu người dùng đã đánh vào bất cứ một đoạn văn bản nào đó trước khi nhấn phím Enter thì lệnh này sẽ capture ký tự kế tiếp (do đó xuất hiện ~0,1ở cuối lệnh). Điều này bảo đảm rằng kịch bản hạn chế được đầu vào nhập vào của người dùng chỉ là ký tự đơn lẻ.

Bạn sẽ thấy dòng tiếp theo trong kịch bản là:

REM echo %_cars%

REM là lệnh ghi lời chú của Windows. Các lệnh bắt đầu với REM đều không được thực thi. Nếu remove lệnh REM, bạn có thể thấy được nội dung của biến _car. Để ý trong hình B bạn sẽ thấy rằng chúng tôi đã thêm lệnh này vào trước và sau lệnh phân tích cú pháp đầu vào của người dùng. Khi kịch bản hỏi về phần chọn lựa, chúng tôi đã nhập vào từ Apple thay vì A, B, C hoặc D. Lệnh loại trừ cú pháp đã cắt từ Apple và chỉ để lại chữ A, bạn có thể xem trong hình, tương ứng với sự lựa chọn cho Lamborghini.


Hình B: Cách làm việc của chức năng phân tích cú pháp

Kết luận

Trong phần này, chúng tôi đã giới thiệu cho các bạn cách tạo một kịch bản menu đơn giản. Trong phần 10 của loạt bài này, chúng tôi sẽ tiếp tục giới thiệu về cách là việc của kịch bản này. Khi giải thích xong chúng tôi sẽ điều chỉnh kịch bản để làm việc với terminal services.

Thứ Ba, 23/09/2008 12:23
42 👨 1.662
0 Bình luận
Sắp xếp theo
    ❖ Tổng hợp