微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Shell编程入门:Linux解释器原理

Shell编程入门:Linux解释器原理

时间:10-08 来源:互联网 点击:

成像awk那样的编程语言,能写成源程序文件)命名为myecho,加上权限后执行它:

代码:

$ ./myecho hi\a

./myecho hi如果你的echo支持-e选项并且你工作的环境还算安静,你在得到上面的结果的时候也应该听到清脆的终端响铃。但这种程序是毫无作用的。

三、我能利用解释器来做什么?

但是上面的echo脚本实际应用时并没有什么作用,我们可以得出一个小小的实验结果,并不是所有的可执行二进制文件都可以用来写解释器脚本。那我编写解释器的脚本有什么用?如果你有一个可编程的解释器,那你或许能编写该解释器的程序来简化你工作。比如说常用到的解释器如awk,perl,bash等等。但是正如我们上面总结的实验结果,很不幸地,并不是全部的可编程程序都是有用的解释器,exec脚本时,能从第一行得到脚本的解释器,然后用exec去解释脚本(可能是选项去控制,如#!/bin/awk -f),也包括了形如#!/PATH/的第一行,如果该解释器对这行不能忽略的话,就会出错,另外解释器也必须要对余下的程序语句能解释(这句好像是废话,但想象一下,上面myecho程序加一些hello world的行来,会有效吗?下面的mysed程序中的s/UNIX/unix/p也是一样的道理)。像awk,perl,bash等程序对#开头的行当成注释行处理,就能写成有用的脚本。

再看下面的mysed程序,

代码:

#!/bin/sed -f

s/UNIX/unix/p执行./mysed时出错了。因为被解释成了/bin/sed -f ./mysed,其中-f选项是表示以文件里的内容作为sed的命令输入,但sed的命令输入不能对#!/bin/sed -f解释,那么程序出错了。

所以,有用的解释器应该是类似bash,perl,awk的程序,并且能对一些规定的语句有解释功能的。下面给出一个awk程序写的统计文件行数和单词数的脚本程序myawk。

代码:

#!/usr/bin/awk -f

BEGIN {

sum = 0;

}

{sum += NF;}

END {

printf(file \%s\ have %d line, %d words.\n, FILENAME, NR, sum);

}设置执行位之后,执行如下:

代码:

$ echo -e hi\nhello world>test.txt

$ ./myawk test.txt

file test.txt have 2 line, 3 words这里执行./myawk被执行成“/usr/bin/awk -f ./myawk test.txt”,因为awk的命令中,以#开头的行被认为是注释行而忽略,awk忽略了第一行#!/usr/bin/awk -f,正确的以非#开头行当成模式和命令的输入并能对其解释,所以这个程序是正确的,能被顺利地执行。

OK,关于Linux系统的解释器的介绍就说到这了,希望大家能对解释器的原理有更多的认识,而不是给我越说越糊涂^_^。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top