linux怎么学(linux怎么学写脚本)

linux怎么学(linux怎么学写脚本)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>欢迎来到博主的专栏&#xff1a;从0开始Linux<br /> 博主ID&#xff1a;代码小豪</p> 

讯享网

什么?我写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就已经写好了,下面是实际使用的演示。

或:

讯享网


小讯
上一篇 2025-05-22 21:36
下一篇 2025-05-14 12:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/200625.html