[原创]脚本小技巧:awk变量传递到shell变量
Posted 我不是代码教父
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[原创]脚本小技巧: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_cml
var_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\\n
BEGIN
#演示作用: 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_cml
var_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脚本的程序员有所帮助.
以上是关于[原创]脚本小技巧:awk变量传递到shell变量的主要内容,如果未能解决你的问题,请参考以下文章