编译并解释中小型程序。
bs [ File [ Arguments ] ]
bs 命令是用于交互式程序开发和调试的编译器和解释器。为了简化程序测试,它使形式数据声明和文件操作最小化,允许每次一行的调试,并提供跟踪、转储工具和运行时错误消息。
可选的参数 File 指定所创建的以及编译器从标准输入读取之前读取的程序语句文件。从标准输入输入的语句通常立即就被执行(请参阅 compile 和 execute 语句语法)。缺省情况下,编译从 File 读取的语句用于以后的执行。
除非最终运算符是变量的赋值,否则会显示即时表达式语句的结果。
附加命令行 Arguments 可使用内置函数 arg 和 narg 来传递至程序。
程序行必须符合以下格式之一:
语句 标签语句
仅当解释器正在编译语句时,它会接受带有标签的语句。标签是后紧跟冒号的名称。标签和变量可以具有相同的名称。如果一行的最后一个字符是 \ (反斜杠),则语句会在余下的物理行上继续。
语句由表达式或跟有零或更多表达式的关键字组成。
注:在国际环境中使用范围表达式时,为了避免不可预见的结果,请使用字符类表达式而非标准范围表达式。
break | 退出最内层 for 或 while 循环。 |
clear | 从内存清除符号表并除去已编译的语句。clear 总是被立即执行。 |
compile [Expression] | 导致编译后继语句(覆盖立即执行缺省)。对可选的 Expression 进行求值并将它用作进一步输入的文件名。后面的情况中,符号表和内存首先被清除。compile 总是被立即执行。 |
continue | 将控制传送至当前 for 或 while 循环的循环继续测试。 |
dump [Name] | 显示每个全局变量的或,有选择地,Named 变量的名称和当前值。在错误或中断之后,dump 显示最后语句的编号以及(有可能)用户函数跟踪。 |
exit [Expression] | 返回至系统级别。Expression 作为进程状态被返回。 |
execute | 更改至立即执行方式(按“中断”键有相同功能)。该语句不会引起已存储语句的执行(请参阅 run)。 |
for | 在命名的变量的控制下使用以下语法之一重复地执行一个语句或一组语句:
for name=Expression Expression statement next 或者 for name=Expression Expression statement . . . next 或者 for Expression, Expression, Expression statement next 或者 for Expression, Expression, Expression statement . . . next 第一个格式指定单个语句,其中变量呈现为第一个表达式的值,然后每次循环都被逐一增加,直到它超过第二个表达式的值。可以使用第二个格式做同样的事情,但也可以指定一组语句。 第三个格式要求紧跟有测试表达式(比如 true to continue)和循环继续操作表达式的初始表达式。可以使用第四个格式做同样的事情,但也可以指定一组语句。在第三个和第四个格式中,使用逗号来分隔表达式。 |
fun | 使用以下语法定义用户写函数:
fun f ([a, . . . ]) [v, . . . ] statement . . . nuf f 指定函数名称,a 指定任意参数,而 v 为用户写函数标识任意本地变量。可指定多达 10 个参数和本地变量;然而,它们不能是阵列或不能与 I/O 功能相关联。不能嵌套函数定义。 |
freturn | 发出"用户写函数失败"信号。不带有问号,freturn 返回零。(请参阅一元问号运算符(?).) 带有问号,freturn 发送至带问号的表达式,可能绕过中间函数返回。 |
goto Name | 将控制传递至具有 Name 的匹配标签的已编译语句。 |
ibase n | 将输入基数设置为 n。对于 n,仅对值 8、10(缺省值)和 16 提供支持。 十六进制值 10-15 作为字母字符 a-f 输入。 当十六进制数字以字母字符作为开头时,会要求具有前导数字(例如,f0a 必须以 0f0a 的形式输入)。ibase 总是被立即执行。 |
if | 以下列语法之一执行语句:
if Expression statement [else statement . . . ] fi 或者 if Expression statement . . . [else statement . . . ] fi 第一个格式指定单个语句而第二个格式指定要继续使用的一组语句(如果该表达式的求值相当于非零)。字符串 0 和“”(空)相当于零。 第二个格式中,在未执行第一组语句的情况下,可选的 else 允许执行另一组语句。只有 if 语句可以在 else 的同一行上。fis 只能放在与另一个 fi 相同的行上。可将 else 与 if 结合为 elif。可以使用单个 fi 关闭 if . . . elif . . . [else . . . ] 序列。 |
include Expression | Expression 相当于包含程序语句的文件名。这样的语句成为正在编译的程序一部分。include 总是被立即执行。不要嵌套 include 语句。 |
obase n | 将输出库设置为 n。对于 n,仅值 8、10(缺省值)和 16 是受支持的。十六进制值 10 到 15 作为 a-f 字母字符输入。当十六进制数字以字母字符作为开头时,会要求具有前导数字(即,f0a 必须以 0f0a 的形式输入)。与 ibase 一样,obase 总是被立即执行。 |
onintr | 使用以下语法之一提供中断的程序控制:
onintr Label 或者 onintr
第一个格式中,控制传递至给出的 Label,就好像执行 onintr 时,已经执行了 goto。每次中断后,onintr 语句的作用被清除。第二个格式中,按“中断”结束 bs 程序。 |
return [Expression] | 对 Expression 进行求值并将结果作为函数调用的值传递回来。如果不提供表达式,函数返回的是零。 |
run | 将控制传递给编译的第一个语句。复位随机号码生成器。如果文件包含 run 语句,它应该是最后的语句;run 总是被立即执行。 |
stop | 停止已编译语句的执行并返回至立即方式。 |
trace [Expression] | 控制函数跟踪。如果不提供 Expression 或者如果它求值为零,会关闭跟踪。否则,会写下用户函数调用/返回记录。每次返回都逐一递减 trace 表达式的值。 |
while | 在命名的变量的控制下使用以下语法之一重复地执行一个语句或一组语句:
while Expression statement next 或者 while Expression statement . . . next while 语句同 for 语句很相似,除了前者仅给出循环继续的条件表达式。 |
!cmd | 运行命令然后将控制返回至 bs 程序。 |
# Comment | 插入一个注释行。 |
Name | 指定变量或者标签(当紧跟有冒号时)。名称由可选择地紧跟有字母和数字的字母(大小写均可)组成。只有名字的前六个字符是有意义的。除了 fun 语句中本地声明的名称,所有名称都是全局的。名称可以呈现为数字型(双倍浮点)值或者字符串值或与输入/输出相关联(请参阅内置函数 open)。 |
Name([Expression[, Expression] . . . ]) | 调用函数 Name,并将括号中的参数传递给它。除非内置函数,Name 必须在 fun 语句中被定义。函数参数由值来传递。 |
Name[Expression[, Expression] . . . ] | 引用数组或表(请参阅内置函数 table)。对于数组,将每个表达式截断为整数并用作名称的说明符。最终的数组引用在语法上同名称相同;[1,2] 与 [1] [2] 的意义是相同的。被截断的表达式必须是 0 和 32,767 之间的值。 |
Number | 代表常量数字值。该数字可以表达为整数、十进制或科学符号(可以包含数字、可选的十进制点和跟有可能的带符号指数的可选的 e)。 |
String | 代表由 ""(双引号)定界的字符串。在字符串中,可以把 \ (反斜杠) 用作转义字符,它允许双引号 ( \")、换行字符 ( \n)、回车 ( \r)、退格 ( \b) 和跳格 ( \t) 字符出现在一个字符串中。如果不是紧跟有这些特殊字符, \ 只表示自己。 |
(Expression) | 改变求值的正常顺序。 |
(Expression, Expression[, Expression] . . . ) [Expression] | 指定把在圆括号外加方括号的表达式用作圆括号内表达式列表的下标。列表内容从左开始编号,以零为开始。如果比较为真,则以下表达式的值也为真(True):
(False, True) [a == b] |
Expression Operator Expression | 在应用运算符之前,将操作数转换成数字形式,除非运算符是个赋值、级连或关系运算符。 |
? Expression | 测试 Expression 是否成功,而非它的值。此问号运算符有助于测试:
询问陷阱(例如,文件末尾)会引起至最近询问的立即转换(可能跳过赋值语句或插入函数级别)。 |
- Expression | 对 Expression 求反。 |
++ Name | 使变量(或数组引用)的值逐一递增。 |
-- Name | 使变量的值逐一递减。 |
! Expression | 指定 Expression 的逻辑非。 |
注:一元运算符把空字符串当作零。
= | 指定赋值运算符。左边的操作数必须是名称或数组元素。它会获取右边操作数的值。赋值从右绑定至左;所有其它运算符从左绑定至右。 |
_ | 指定级连运算符。(它是加下划线的字符。) |
& | | 指定逻辑和、逻辑或。
仅当两个参数都是非零(真)时, Expression & Expression 的结果是 1(真);如果其中一个或两个参数都是 0(假),它的结果是 0(假)。 如果一个或两个表达式都为非零(真), Expression | Expression 的结果是 1(真);仅当两个表达式都是 0(假)时,它的结果是 0(假)。两个运算符都把空字符串作为零。 |
< <= > >= == != | 指定关系运算符:
如果指定的关系为真(True),关系运算符返回 1;否则,它们返回 0(假)。同一级别的关系运算符可扩展为以下: a>b>c 与 a>b& b>c 是相同的。如果两个操作数都是字符串,会进行字符串比较。该比较是基于在环境变量 LC_COLLATE 中指定的整理序列。本地语言支持概述包含有关此环境变量的更多信息。 |
+ - | 指定加和减。 |
* / % | 指定乘、除和余数。 |
^ | 指定乘幂。 |
注:二元运算符把空字符串作为零。
arg(i) | 返回处在当前函数调用级别的第 i- 个实际自变量的值。在零级别,arg 返回第 i- 个命令行自变量。例如,arg(0) 返回 bs。 |
narg( ) | 返回已通过的自变量数。在零级别,它返回命令行自变量计数。 |
open(Name, File, Mode)
要执行 bs 命令并将结果导向称为输出的文件,输入:
bs < input.n > output
或者
bs input.n > output
ksh 命令。
AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 National Language Support Overview for Programming。