以前一篇文章《shell 脚本实现文件对称加密》中,讲述了如何用 shell 脚本实现对称加密。html
以后写管理密码脚本时,发觉该脚本的处理速度很是慢,而其缘由就在 shell 的处理命令上,而将其中的循环亦或运算改用 awk 处理便可,下面记录须要注意的地方。git
笔者使用的 awk 版本不支持 xor()
即内置亦或运算函数,因此必须本身编写亦或运算,下面为亦或运算的实现。github
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
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 )大小的文件,用新的脚本测试结果以下:ssh
3.24s user 0.10s system 102% cpu 3.244 total
而用旧的脚本跑了 20 分钟都还未处理完成,可见其速度上的差距。函数
对于 awk 的语法还有 shell 脚本优化等,还有不少须要学习的地方。学习
密码管理脚本在笔者的 Github 上,该脚本基本实现了一个小型 key-value 数据库,有空会单独分离出来实现一个功能更完整的 key-value 数据库。测试