树莓派笔记--修改配置文件的LUA脚本
设置配置项:
#!/bin/sh
# 设置配置项
# 找出指定的字段修改为对应的值
# 如果该字段已存在,则修改
# 如果该字段不存在,则添加
# 如果该字段被注释掉,则除去注释再修改
# 如果该字段重复,则每一项都修改
set_config_var() {
lua - "$1" "$2" "$3" <<EOF > "$3.bak"
local key=assert(arg[1])
local value=assert(arg[2])
local fn=assert(arg[3])
local file=assert(io.open(fn))
local made_change=false
for line in file:lines() do
if line:match("^#?%s*"..key.."=.*$") then
line=key.."="..value
made_change=true
end
print(line)
end
if not made_change then
print(key.."="..value)
end
EOF
mv "$3.bak" "$3"
}
set_config_var $1 $2 $3
应用示例: 设置hdmi_group=1
$ ./set_config.sh hdmi_group 1 config.txt
清除配置项:
# 如果该字段存在,且未被注释掉时,则在行首添加#注释
clear_config_var() {
lua - "$1" "$2" <<EOF > "$2.bak"
local key=assert(arg[1])
local fn=assert(arg[2])
local file=assert(io.open(fn))
for line in file:lines() do
if line:match("^%s*"..key.."=.*$") then
line="#"..line
end
print(line)
end
EOF
mv "$2.bak" "$2"
}
读取配置项:
get_config_var() {
lua - "$1" "$2" <<EOF
local key=assert(arg[1])
local fn=assert(arg[2])
local file=assert(io.open(fn))
local found=false
for line in file:lines() do
local val = line:match("^%s*"..key.."=(.*)$")
if (val ~= nil) then
print(val)
found=true
break
end
end
if not found then
print(0)
end
EOF
}