什么?我写bash?bash作为一个大型的shell程序,甚至已经成为一种语言。博主当然没能力复刻。
博主这里写了一个仿bash的shell程序。主要目的是仿制bash的命令行是如何执行命令的,但是bash的功能远超于此。相当于是博主在班门弄斧了。这里先带大家了解一下bash。
bash是linux系统下的默认shell程序。比如我们登录linux系统后,显示出来的命令行,其实就是bash程序的命令行模式
我们在命令行中写的指令,其实都是交给bash解析的。而且我们在命令行中启动的程序,其父进程都是bash。因此,我们打开linux系统所见的那个黑乎乎的命令行,其实就是bash,换句话说,我们在使用linux的时候,其实一直都在使用bash程序,只是我们对其不了解罢了。
博主将这个自己写的shell程序,命名为myshell,既然myshell要仿bash的命令行模式,首先我们要搞清楚bash的功能有什么。
首先是命令行,我们要先提示用户,当前我们处于命令行模式,请用户输入指令。因此,我们要先写出myshell的命令行提示符。为了和bash做出区分,因此命令行设计也要和bash不同才行。
其具体格式为,而这些信息都在环境变量当中,因此需要用到getenv()函数获取这些数据。
//博主在文章末尾会附上完整代码,因此这里只展示部分,以提供思路参考
接下来,命令行可以接收用户输入的命令,我们将其保存在一个字符数组当中。
第三步是解析用户命令行参数,比如,我们应该将每个单独的字符串(即空格隔开的字符串),按照顺序保存在一个字符型指针数组当中。
第四步是执行用户命令,在前面的进程章节中,博主提到,在命令行执行的程序,实际上都是bash创建的子进程,但是bash是如何创建的呢?其实原理很简单,bash使用fork函数,创建一个子进程,接着用execvpe函数,切换到用户想要启动的进程,比如bash执行ls指令,本质上就是bash先fork出一个子进程,接着的方式创建的。具体的细节大家可以去看看博主前面写的,与进程相关的文章,实际上博主写这个myshell的本质是想让大家将进程系列的知识串联起来。
但是有些命令,是不能通过创建子进程的方式执行的,比如cd指令,我使用这个指令是想让bash切换工作路径,而是让子进程切换路劲,因此如果解析出用户使用cd指令,我们应该让bash自己去执行,而非创建子进程执行,这种命令,我们称其为内建命令。bash的内建命令比较多,博主只写了其中几个。
到此,一个简单的shell程序myshell就已经写好了,下面是实际使用的演示。
或:
到此这篇linux怎么学(linux怎么学写脚本)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/luakf/74924.html