|
这个东东能不能解决你的问题?
支持拨号网络脚本制作的
拨号脚本制作命令语言
目录
1.0 概述
2.0 脚本的基本结构
3.0 变量
3.1 系统变量
4.0 字符串
5.0 表达式
6.0 注释
7.0 关键字
8.0 命令
9.0 保留字
1.0 概述
许多 Internet 服务提供商和联机服务要求您手动输入信息,如用户名和密码,以建立连接。利用拨号网络的脚本制作支持程序,可以编写一个脚本使这一过程自动完成。
脚本是文本文件,它包含 Internet 服务提供商及联机服务建立连接和使用服务所需的一系列命令、参数和表达式。您可以使用任何文本编辑器,如 Microsoft 记事本,来创建脚本文件。一旦建立了脚本文件,就可以通过运行拨号脚本制作工具将它分配给特定的拨号网络连接。
2.0 脚本的基本结构
命令是脚本文件的基本结构。有些命令需要参数来更进一步说明该命令应执行的操作。表达式是变量和运算符的集合,并由此得出一个结果。表达式可以用作任何命令中的参数值。通常,表达式由算术运算符、关系比较符号以及字符串连结而成。
以下是拨号网络脚本的基本格式:
;
;每行的注释以分号开头,直至行尾。
;
proc main
;每个脚本可以有多个变量和命令
variable declarations
command block
endproc
每个脚本必须有一个主程序,由 proc 关键字指定,并用 endproc 关键字来标志程序的结束。
添加命令之前,必须先定义变量。主程序的第一条命令执行后,将按脚本中出现的先后顺序依次执行下面的命令,主程序的结束就意味着脚本的结束。
3.0 变量
脚本可以包含变量。变量名必须以字母或下划线('_')开始,可以包含大小写字母、数字和下划线,但不能将保留字用作变量名。详细信息,请参阅文档末尾的保留字表。
使用变量前,必须先对它进行声明。声明变量时,必须同时定义其类型。某种类型的变量只能包含同种类型的值。脚本支持以下变量类型:
类型 说明
integer(整型) 正数或负数,如 7, -12 或 5698。
String(字符串型) 包含在双引号 (“”) 中的一组字符;如"Hello world!" 或 "Enter password:"。
Boolean(布尔型) 逻辑型布尔值,包括 TRUE 和 FALSE。
使用以下赋值语句可以为变量分配值:
variable = expression(变量=表达式)
表达式的结果将赋给变量。
例如:
integer count = 5
integer timeout = (4 * 3)
integer i
boolean bDone = FALSE
string szIP = (getip 2)
set ipaddr szIP
3.1 系统变量
系统变量可由制作脚本的命令设置,或由建立拨号网络连接时所输入的信息来决定。系统变量是只读的,不能在脚本中修改。它包括:
名称 类型 描述
$USERID String 目前所用连接的用户身份。该变量值是在“拨号网络连接到”
对话框中定义的用户名。
$PASSWORD String 目前所用连接的密码。该变量值是在“拨号网络连接到”
对话框中定义的密码。
$SUCCESS Boolean 该变量由特定命令设置,以表明命令是否执行成功。脚本将根据
该变量的值做出决定。
$FAILURE Boolean 该变量值由特定命令设置,以表明命令是否执行失败。脚本将根据
该变量的值做出决定。
这些变量可以用在任何相同类型的表达式中。如:
transmit $USERID
是一个有效命令,因为 $USERID 是字符串变量。
4.0 字符串
拨号网络的脚本制作支持 Escape 序列和脱字符转换,如下所述。
字符串 说明
^char 脱字符转换
如果 char 介于 '@' 和 '_' 之间,字符序列将被转换为从 0 到 31 的单字节值。例如, ^M 被转换成回车
如果 char 介于 a 和 z 之间, 字符序列将被译成从 1 到 26 的单字节值。
如果 char 是其它值,没有特殊的处理方法。
回车
换行
\" 双引号
\^ 单个脱字符^
\< 单个'<'
\\ 反斜杠
例如:
transmit "^M"
transmit "Joe^M"
transmit ""
waitfor ""
5.0 表达式
表达式是指能够计算出结果的部分变量和运算符的集合。表达式可以作为数值用在任何命令中。
表达式可以用下表中的任何一元或二元运算符,把任何变量 -- 整型、字符串型或布尔型变量连接起来。一元运算符具有最高优先级,二元运算符的优先级取决于它们在下表中的位置。
一元运算符有:
运算符 运算方式
- 一元减法
! 求补
下表所列的二元运算符是按其优先级顺序排列的,优先级高的列在前面。
运算符 运算类型 类型限制
* / 乘除 整型
+ - 加减 字符串(只能为+)
< > <= >= 关系运算符 整型
== != 相等 整型、字符串型、布尔型
and 逻辑与 布尔型
or 逻辑或 布尔型
例如:
count = 3 + 5 * 40
transmit "Hello" + " there"
delay 24 / (7 - 1)
6.0 注释
分号后的一行文本都将被忽略。
例如:
;这是注释
transmit "hello" ;传送字符串 ”hello”
7.0 关键字
关键字指定脚本的结构。与命令不同,它们并不执行某项操作。以下是关键字的列表:
proc name
标志程序的开始,所有脚本都必须有一个主程序(proc main)。脚本从主程序的第一行开始执行,直至主程序的最后一行。
endproc
标志程序的结束,当脚本执行到主程序的 endproc 语句时,拨号网络将启动 PPP 或 SLIP。
integer name [ = 值 ]
声明一个整型变量,您可以用任何数值表达式或变量初始化该变量。
string name [ = 值 ]
声明一个字符串变量,您可以用任何字符串或变量初始化该变量。
boolean name [ = 值 ]
声明一个布尔型变量,您可以用任何布尔表达式或变量初始化该变量。
8.0 命令
所有的命令都是保留字,这意味着您不能声明一个与命令同名的变量。以下是命令列表:
delay nSeconds
在执行脚本的下一条命令前,暂停 n 秒。
例如:
delay 2 ; 暂停 2 秒
delay x * 3 ; 暂停 x * 3 秒
getip value
等待来自远程计算机的 IP 地址。如果您的 Internet 服务提供商在一个字符串中返回几个 IP 地址,用 value 参数指定脚本将使用哪一个 IP 地址。
例如:
; 取第二个 IP 地址
set ipaddr getip 2
; 将收到的 IP 地址赋值赋给变量
szAddress = getip
goto label
跳到脚本中标有 label 的语句,并继续执行后面的命令。
例如:
waitfor "Prompt>" until 10
if !$SUCCESS then
goto BailOut ; 跳到 BailOut,然后继续执行后面的语句
endif
transmit "bbs^M"
goto End
BailOut:
transmit "^M"
halt
停止脚本的执行。该命令不删除终端对话窗口,必须单击“继续”以建立连接,但不能重启动脚本。
if condition then
commands
endif
如果 condition 为真,将执行一系列命令。
例如:
if $USERID == "John" then
transmit "Johnny^M"
endif
label :
指定跳转到脚本的某一位置,label 不能重复使用,并要遵循变量命名规则。
set port databits 5 | 6 | 7 | 8
更改会话时传送、接收字节的位数,位数必须介于 5 和 8 之间。如果不使用该命令,拨号网络将采用连接时指定的属性设置。
例如:
set port databits 7
set port parity none | odd | even | mark | space
更改会话时端口的奇偶校验方式。如果不使用该命令,拨号网络将采用连接时指定的属性设置。
例如:
set port parity even
set port stopbits 1 | 2
更改会话时端口的停止位,位数必须介于 1 和 2 之间。如果不使用该命令,拨号网络将采用连接时指定的属性设置。
例如:
set port stopbits 2
set screen keyboard on | off
允许或禁止在脚本终端窗口进行键盘输入。
例如:
set screen keyboard on
set ipaddr string
指定会话时的工作站 IP 地址,String 必须写成 IP 地址的格式。
例如:
szIPAddress = "11.543.23.13"
set ipaddr szIPAddress
set ipaddr "11.543.23.13"
set ipaddr getip
transmit string [ , raw ]
将 string 指定的字符传送给远程计算机。
除非您在命令中包含 raw 参数,否则远程计算机将承认 escape 序列和脱字符的转换。没有 raw 参数时,用户名或密码所包含的字符序列将被解释成脱字符或 escape 序列,因此参数 raw 在传送 $USERID 和 $PASSWORD 系统变量时是非常有用的。
例如:
transmit "slip" + "^M"
transmit $USERID, raw
waitfor string [ , matchcase ] [ then label
{ , string [ , matchcase ] then label } ]
[ until time ]
一直等到您的计算机从远程计算机上收到一个或几个指定的字符串,string 参数不识别大小写,除非您使用 matchcase 参数。
如果已收到指定的字符串,则需要使用 then label 参数,该命令将跳转到脚本文件中指定为 label 的语句。
可选参数 until time 定义计算机的最长等待时间(以秒计算),如果不设置该参数,计算机将永远等待。
如果您的计算机收到一个指定的字符串,系统变量 $SUCCESS 将设置为 TRUE,否则,如计算机等候了 time 秒仍未收到字符串,该变量将设置为 FALSE。
例如:
waitfor "Login:"
waitfor "Password?", matchcase
waitfor "prompt>" until 10
waitfor
"Login:" then DoLogin,
"Password:" then DoPassword,
"BBS:" then DoBBS,
"Other:" then DoOther
until 10
while condition do
commands
endwhile
执行一系列命令,直到 condition 为 FALSE。
例如:
integer count = 0
while count < 4 do
transmit "^M"
waitfor "Login:" until 10
if $SUCCESS then
goto DoLogin
endif
count = count + 1
endwhile
...
9.0 保留字
以下是保留字。注意保留字不能用作变量名。
and boolean databits delay
do endif endproc endwhile
even FALSE getip goto
halt if integer ipaddr
keyboard mark matchcase none
odd off on or
parity port proc raw
screen set space stopbits
string then transmit TRUE
until waitfor while |
|