1.16.1、shell是什么鬼?
1.16.1.1、壳与封装
- (1)shell就是壳的意思,在计算机中经常提到shell就是计算机用户操作接口的意思
- (2)因为计算机陈旭本身很复杂,里面的实现和外部的调用是分开的,接口本身就是对内部复杂的实现的一种封装,外部只需要通过接口就可以很容易的实现效果,但是却不用理会内部实现的复杂性和原理
1.16.1.2、程序或操作系统的用户接口
- (1)操作系统运行起来以后都会给用户提供一个操作界面,这个操作界面就是shell。用户可以通过shell来调用操作系统内部的复杂实现
- (2)shell编程就是shell层次上进行编程。譬如linux中的脚本编程,windows中的批处理
1.16.1.3、两种shell:GUI和cmdline
- (1)GUI(图形用户界面),特点是操作简单、易学易用,适合使用电脑来工作的人
- (2)cmdline(命令行界面),譬如linux的中断和windowsde cmd,特点是不易不容易学,优点是可以进行方便的shell编程,适合做开发的。
- (3)展望:将来的shell应该是声音图像等接口。
1.16.1.4、shell的运行原理:由消息接收、解析、执行构成的死循环
- (1)我们主要分析命令行的shell的运行原理
- (2)命令行shell其实就是一个死循环。这个死循环包含3个模块,这3个模块是串联的,分别是命令接收、命令解析、命令执行。
- (3)命令行有一个标准命令集,用户操作的时候必须知道自己想要的操作需要通过那个命令来实现,不可以随便输入命令。然后重新回到命令行让用户输入下一个命令
- (4)用户输入命令的界面是一个命令行,命令行的意思是用户输入的命令是以行位单位的,更好理解的说用户输入的命令在用户输入回车之后就算结束了,shell可以开始接收了。
1.16.1.5、shell举例:uboot、linux终端、windows图形界面
- (1)常见的shell,uboot就是一个逻辑程序构成的shell(本课程要完成的shell也是裸机的),c LINUX终端和windows的cmd是操作系统下的命令行shell。windows 图形界面和ubuntu图形界面,android图形界面,这些都是图形界面的shell。另外一个类型的shell就是网页类型的shell,典型的例子路由器
1.16.2、shell实战1-从零写最简单的shell
1.16.2.1、使用printf和scanf做输入回显
1.16.2.2、定义简单命令集
1.16.3.shell实战-------将简易shell移植到开发板中
1.16.3.1、工程选定、文件复制、makefile书写
1.16.3.2、printf和scanf函数(本质是putc和getc)的移植
- (1)puts和putchar函数比较简单,要注意的地方就是windows和linux中定义的回车键的不同,所以在putchar函数中如果用户要输出“ ”时实际上输出为“ ”
- (2)gets和getchar是从windows中的SecureCTR终端输入字符串到裸机中。这里面至少有2个问题:用户输入回显问题、回车键问题、用户按backspace键退格问题
- (3)自己实现回显
- (4)用户按回车问题,解决方法:收到‘ ’后直接返回 ’
1.16.3.3、编译下载和调试验证
1.16.4.shell实战3-定义标准命令集及解析
-
1.16.4.1、天假cmd_parser
-
1.16.4.2、实现简单的cmd_parser
-
1.16.4.3、实现对应的cmd_exec
1.16.5、shell实战4-添加第一个命令
(1)第一个命令:led,实现的功能是控制板载的LED的亮和灭
(2)命令定义:led on 表示点亮led, led off 熄灭led
(3)扩展:led 1 on 表示点亮第一个led。
1.16.5.2、命令解析
(1)命令解析其实就是把一个类似led on 这种命令解析成led 和 on两个字符串,放在一个字符串数组中