数据结构操作示例
let user = { name: "Alice", profile: { age: 25, skills: ["rust", "javascript", "python"] } } user.profile.skills@1
|
1...10 | .map(x -> x * 2) | .filter(x -> x > 10)
|
ls -1 |> print "-->" _ "<--"
|
df -H | Into.table() | pprint Fs.ls -l | where(size > 5K) | select(name,size,modified)
|
6 / 0 ?. 6 / 0 ?: x -> print x
|
let a := (x) -> x + 1 debug a
|
let data = {a: 1, b: 2, c: 3}
let result = Map.map( k -> k.to_upper(), v -> v * 2, data )
|
实用示例
文件处理:
系统管理
ps u -u1000 | Into.table() | where( Into.float(CPU) > 2.0 ) | pprint
|
ps u -u1000 | Into.table() | where( Into.float(MEM) > 10.0 ) | pprint
|
网络操作
curl 'https://jsonplaceholder.typicode.com/posts/1/comments' | From.json() | pprint
curl 'https://jsonplaceholder.typicode.com/posts/1/comments' | From.json() | where(id < 3) | select(name,email)| pprint
|
let a = curl 'https://jsonplaceholder.typicode.com/posts/1/comments' | From.json() a >> data.json a | Into.csv() >> data.csv a | Into.toml() >> data.toml
type a len(a)
|
运维脚本
let sel = ( lsblk -rno 'name,type,size,mountpoint,label,fstype' | Into.table([name,'type',size,mountpoint,label,fstype]) \ | where($type!='disk' && !$mountpoint && $fstype !~: 'member') \ | Ui.pick "which to mount:") ?: { print 'no device selected' }
if $sel { let src = (sel.type == 'part' ? `/dev/${sel.name}` : `/dev/mapper/${sel.name}`) let point = (sel.label==None ? sel.name : sel.label) let dest = `/run/user/${id -u}/media/${point}` if !Fs.exists($dest){ mkdir -p $dest } sudo mount -m -o 'defaults,noatime' $src $dest ?: \ e -> {notify-send 'Mount Failed' $e.msg; exit 1} notify-send 'Mount' `device $src mounted` }
|
常用内置模块
文件系统模块 (Fs)
Fs.ls("/path") Fs.mkdir("new_dir") Fs.rm("empty_dir")
Fs.read("file.txt") Fs.write("file.txt", data) Fs.append("Log.txt", entry)
Fs.exists("/path/to/file") Fs.is_dir("/path") Fs.canon("./relative/path")
|
系统目录访问
let dirs = Fs.dirs() println(dirs.home) println(dirs.config) println(dirs.cache) println(dirs.current)
|
文件列表详细信息
Fs.ls -l Fs.ls -a Fs.ls -L Fs.ls -u Fs.ls -m Fs.ls -p
|
常用内置函数
核心函数
len(collection) type(value) rev("string") flatten([[1,2],[3,4]])
eval(expression) exec_str("let x = 10") include("script.lm") import("module.lm")
|
数据查询和过滤
let users = [ {name: "Alice", age: 25, active: True}, {name: "Bob", age: 30, active: False}, {name: "Carol", age: 35, active: True} ]
let active_users = where(active, users)
let names_ages = select(name, age, users)
|
命令执行系统
外部命令执行
Lumesh 支持多种命令执行模式:
ls -la
command &
command &-
|
PTY 支持
对于需要终端交互的程序,Lumesh 提供 PTY 支持:
ls -l | vi
ls -l |^ vi '' |^ vi 'file.txt'
|
脚本执行
脚本运行器
Lumesh 提供两种执行模式:
lumesh -c "print 'Hello World'"
lumesh script.lm arg1 arg2
println(argv[0])
|
测试示例
#!/usr/bin/env lumesh
fn assert(actual, expected, test_name) { if actual != expected { print "[FAIL]" test_name "| 实际:" actual "| 预期:" expected } else { print "[PASS]" test_name } }
let x = 10 assert(str(x), "10", "单变量赋值")
x := 2 + 3 assert(eval(x), 5, "延迟赋值求值")
|
日志系统
日志级别管理
Log.set_level(Log.level.info)
if Log.enabled(1) { Log.debug("调试已开启") } Log.info("调试信息")
Log.disable()
|
了解更多: