[原创]脚本小技巧:awk变量传递到shell变量

[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
个人网站: https://www.x86asm.org
QQ交流: 643439947
编程生涯: 2001年~至今[共20年]
职业生涯: 18年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
最近在忙着复习shell脚本语言, 一共花费了10天. 这次要写真正意义的shell脚本程序, 因此这次复习不可马虎.

[遇到的麻烦]
在写shell脚本代码的时候, 会发现awk很好用, 它的语法避开了很多shell语法的坑. 所以我尝试大规模的代码全在awk里面, 少量代码在shell里面. 但在开发过程中, 遇到一个小麻烦: 在非单行程序中, awk变量如何传递给shell使用呢? 经过2天的测试和反复阅读awk和shell的书籍, 正确写出了演示代码: 

[在非单行awk引用单行shell/多行shell的优势]
1> 可以专注awk的简单语法, 避免各种带有坑的shell语法
2> 在awk环境下, 可执行单行shell/多行shell命令, 这样可以适当发挥shell大量内置命令或者外部命令的优势

[awk变量传递给单行shll的代码演示]

#awk的BEGIN区域
#在awk下执行单行shell代码. 注意 语法是 { sh2ll代码1; shell代码2; shell代码3; }
BEGIN {#演示作用: awk的变量为var_for_awk, 通过awk的管道传递给单行shell, 在shell内使用read命令接受并保存到var_get_awk变量 var_read_cml = "var_get_awk; printf \"$var_get_awk\n\"; } "var_read_cml_full = "{ read " var_read_cmlvar_for_awk = "Hello world\n" printf var_for_awk | ("{ read " var_read_cml)close("{ read " var_read_cml)}

[awk变量传递给多行shll的代码演示]

#在awk下执行单行shell代码. 注意 语法是
# sh2ll代码1\n
# shell代码2\n
# shell代码3\nBEGIN {#演示作用: awk的变量为var_for_awk, 通过awk的管道传递给多行shell, 在shell内使用read命令接受并保存到var_get_awk变量 var_read_cml = "var_get_awk\n"\"printf \"$var_get_awk\n\"\n"\"printf \"shell end...\n\""var_read_cml_full = "read " var_read_cmlvar_for_awk = "Hello world\n" printf var_for_awk | ("read " var_read_cml)close("read " var_read_cml)}

[以上代码需要注意的细节]
1> 记得使用close关闭已经打开的管道, 否则awk的BEGIN模块和END模块无法进行同步处理, 也就是说BEGIN模块没有运行完成, 则END模块已经启动了.

[结尾]
希望这个小代码技巧对喜欢shell脚本的程序员有所帮助.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部