优化对称加密的 shell 脚本
前言
之前一篇文章《shell 脚本实现文件对称加密》中,讲述了如何用 shell 脚本实现对称加密。
之后写管理密码脚本时,发觉该脚本的处理速度非常慢,而其原因就在 shell 的处理命令上,而将其中的循环亦或运算改用 awk 处理即可,下面记录需要注意的地方。
亦或运算及函数
笔者使用的 awk 版本不支持 xor()
即内置亦或运算函数,所以必须自己编写亦或运算,下面为亦或运算的实现。
function xor(l, r) {
ret = 0;
bit = 0;
while (l != 0 && r != 0) {
t = ((l % 2) == (r % 2)) ? 0 : 1;
ret = ret + (2^bit)*t;
l = int(l / 2);
r = int(r / 2);
bit++;
}
while (l != 0) {
t = ((l % 2) == 0) ? 0 : 1;
ret = ret + (2^bit)*t;
l = int(l / 2);
bit++;
}
while (r != 0) {
t = ((r % 2) == 0) ? 0 : 1;
ret = ret + (2^bit)*t;
r = int(r / 2);
bit++;
}
return ret;
}
但是手机上的 awk 版本还不支持自定义函数,无奈只能将这段函数里的代码放到主过程上。
传递数据
shell 中往 awk 脚本传递数据可以用 -v "var=value"
方法,但是当数据量过大时就只能用管道传递,否则会报 Argument list too long
的错误,下面是一个示范例子。
# variable 'data' contains a lot of data
echo -ne "${data}"|awk '
BEGIN {
print($0); # print data
}
'
测试结果对比
对一个 1395351 字节(约为 1.4M )大小的文件,用新的脚本测试结果如下:
3.24s user
0.10s system
102% cpu
3.244 total
而用旧的脚本跑了 20 分钟都还未处理完成,可见其速度上的差距。
后话
对于 awk 的语法还有 shell 脚本优化等,还有很多需要学习的地方。
密码管理脚本在笔者的 Github 上,该脚本基本实现了一个小型 key-value 数据库,有空会单独分离出来实现一个功能更完整的 key-value 数据库。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统