2.newLISP脚本操作(newLISP 代码模式 v.10.6.2)

命令行参数

在 Linux/Unix系统下, 将下面的代码写在脚本文件的第一行:

`#!/usr/bin/newlisp`

指定一个更大的堆栈:

`#!/usr/bin/newlisp -s 100000`

或者

`#!/usr/bin/newlisp -s100000`

不同系统的Shell在解析第一行和提取参数的处理方式是不一样的。newLISP可以处理联合和分开两种参数传递方式(如上).下面这段简单的代码可以用来测试各种系统的参数处理方式. 脚本将堆栈设置成100,000 ,内存最大占用量限制在10M以内.

```

#!/usr/bin/newlisp -s 100000 -m 10

(println (main-args))

(println (sys-info))

(exit) ; important

```

下面是某个系统的输出数据:

```

./arg-test

("/usr/bin/newlisp" "-s" "100000" "-m" "10" "./arg-test")

(308 655360 299 2 0 100000 8410 2)

```

记住只有少数newLISP程序需要修改更大的堆栈参数; 大部分情况下默认的2048已经够用了. 每个堆栈平均消耗80个字节. 其余的newLISP参数选项,爬手册去吧。

管道交互

下面代码展示了如何将一个文件通过管道输入到newLISP 脚本中.

```

#!/usr/bin/newlisp

#

# uppercase - demo filter script as pipe

#

# usage:

#          ./uppercase < file-spec

#

# example:

#          ./uppercase < my-text

#

#

​   

(while (read-line) (println (upper-case (current-line))))

​   

(exit)

```

文件内容将会被转换成大写然后打印到标准输出 (std-out).

下面的代码能够处理非文本的二进制文件(包含了0字符):

```

#!/usr/bin/newlisp

;

; inout - demo binary pipe

;

; read from stdin into buffer

; then write to stdout

;

; usage: ./inout < inputfile > outputfile

;

(while (read 0 buffer 1024)

    (write 1 buffer 1024))

(exit)

```

将缓冲区大小设置到最高效的尺寸.

文件过滤

下面的脚本类似Unix下的 grep , 遍历每一个文件,并用正则表达式过滤文件中的每一行.

```

#!/usr/bin/newlisp

#

# nlgrep - grep utility on newLISP

#

# usage:

#          ./nlgrep "regex-pattern" file-spec

#

# file spec can contain globbing characters

#

# example:

#          ./nlgrep "this|that" *.c

#

# will print all lines containing 'this' or 'that' in *.c files

#

​   

(dolist (fname (3 (main-args)))

    (set 'file (open fname "read"))

    (println "file ---> " fname)

    (while (read-line file)

        (if (find (main-args 2) (current-line) 0)

            (write-line)))

    (close file))

(exit)

```

表达式:

`(3 (main-args))`

相当于:

`(rest (rest (rest (main-args))))`

返回一个包含了所有文件的列表. 这种为rest指定索引的形式称为隐式索引. 隐式索引细节或其它用法参考用户手册. 表达式` (main-args 2)` 提取命令行的第三个参数作为正则表达式.

newLISP 作为管道

管道直接将每行简短的代码输入到newLISP中执行运算。

```

~> echo '(+ 1 2 3)' | newlisp

6

~>

```

你可能感兴趣的:(2.newLISP脚本操作(newLISP 代码模式 v.10.6.2))