学点shell-what's shell
学习shell之前,有必要了解什么是shell
从shell的表面意思看,shell表示“壳”,与kernel“内核”相对。从linux系统逻辑上看,linux实际上可以划分为
内核与外部程序,内核负责任务的调度、文件管理等,而外部程序则是类似与壳,提供外部与内核进行通信与交互的工具。
shell就是供外部与内核进行通信的接口或者工具。
shell的职责
shell的职责有如下:
- 执行程序
- 变量与文件名的替换
- I/O重定向
- 管道处理
- 解释编程语言
执行程序
shell执行程序的格式无外乎以下形式:
程序名 参数列表
shell以特殊的符号去判断程序名的起止位置和参数的起止位置。这些字符通称为空白字符。空白字符包括:空格、横向制表符和换行符。
cp * /www/htdocs
键入上述命令后,shell扫描命令行,并提取该行开始到第一个空白符号之间的内容作为将要执行的程序名:cp
然后继续扫描,扫描到第一个参数为*,*对于shell来说属于特殊符号,这时shell要进行替换操作,将*替换为当前目录下的文件名
接着shell继续扫描,获得第二个参数。扫描完毕后,接下来shell将要执行cp程序。
变量与文件名的替换
与其他程序设计语言类似,shell也允许对变量进行赋值,任何时候,在命令行中指定一个变量,并且在变量前附以美元符号,shell都会在这个
位置用已赋值给这个变量的值来替换。
同时shell也执行文件名的替换
在命令行中,shell遇到*,?或者[....]会进行相应的替换操作,而这些操作都是在程序执行前进行的,对于程序来说这些操作是透明的,程序并
不清楚这些动作的发生。从这一点我们也可以看出shell确实在用户和程序之间起到一个透明媒介的作用。
I/O重定向
在命令行中执行I/O的输入输出也是shell的职责,shell会扫描命令行中>,<,>>等重定向符号。
键入命令:
echo hello world > first
对于程序echo来说,它并不知道将输出结果重定向到first文件中,而是认为将输出结果输出到标准设备上。shell程序扫描到>重定向符号后会将
标准的输出结果重定向到first到文件中。而重定向操作对于echo程序来说是透明的。
管道连接
对于管道符号|,shell会将|前程序的标准输出作为|后的程序的标准输入。通过管道连接可以将各种命令连接起来,通过小而美的部件组成大而强的
大家伙,这也是linux的优美之处。
浙公网安备 33010602011771号