什么是Shell
Shell既是一种命令语言,又是一种程序设计语言(即Shell脚本)。作为一种基于命令的语言,Shell 交互式地解释和执行用户输入的命令;作为程序设计语言,Shell中可以定义变量、传递参数,并提供了许多高级语言所有的流程控制结构。
Shell的原意为“壳”,它包裹在内核之外,处于用户与内核之间,其主要功能为接收用户输入的命令,找到命令所在位置,并加以执行。在计算机科学中,可以认为Shell是包裹在内核外的命令接口,又因为其最重要的功能是命令解释,所以也可以认为Shell是一个命令解释器。Shell与内核及用户间的关系如图所示。
Shell的种类
常见的有:BSh、CSh、KSh、bash等
- Bash Shell是Bourne Shell的一个免费版本,是最早的Unix Shell,包括许多附加的特点,是一个交换式的命令解释器和命令编程语言。
- C Shell中使用“类C”语法,借鉴了Bourne Shell的许多特点,新增了命令历史、别名、文件名替换等功能。
- Korn Shell的语法与Bourne Shell相同,同时具备了CShell的交互特性,因此广受用户青睐。Bourne Again Shell,即bash,是GNU计划的一部分,用于GNU/Linux系统大多数Linux都以bash作为缺省的shell。(常用)
用户可通过
Is /bin/*sh
命令查看系统中安装的shell.
Shell功能
Shell最重要的功能是命令解释器,Linux系统中的所有可执行文件都可以在shell中执行。Linux系统中的可执行文件可以分为五类:
- Linux命令:用来使系统执行某种操作的指令,存放在/bin和/sbin目录下:
- 内置命令:存放于Shell内部的命令的解释程序,是一些常用的命令。可以使用“type 命令名”的方式来查看某个命令是否为内置命令
- 实用程序:存放于/usr/bin、/usr/sbin、/usr/local/bin等目录下的程序,如lswhich等;
- 用户程序:由用户编写的,经过编译后可执行的文件
- Shell脚本:使用Shell语言编写的批处理文件
Shell对命令的解释过程:
用户输入命令,shell判断是否是内置命令,是的话执行,不是的话去硬盘寻找。
可以看出,shell承上启下,上承用户,下接Kernel(内核)。作用有两方面:1.命令解释,2.编写程序。
Shell的应用
1.输入/输出重定向
默认情况:
Linux系统中将从终端输入数据称为标准输入(鼠标,键盘,扫描仪...),将打印数据到终端称为标准输出(默认是显示器),并设置了3个标准文件,分别关联标准输入、标准输出以及标准错误输出信息,标准输入文件的编号为0,默认设备是键盘;标准输出文件的编号1,默认设备是显示器;
标准错误文件的编号为2;默认设备也是显示器。
但并非任何时候用户都希望使用默认设置,这种情况下,可使用重定向,更改命令获取与信息输出的方向。
所谓重定向,即使用用户指定的文件而非默认资源(键盘、显示器)来获取或接收文件。重定向可分为三种:(一般会用文件来替代)
- 输入重定向
- 输出重定向
- 错误重定向
输入重定向:
实现输入重定向的运算符为具体格式如下
命令<文件名(把文件的内容输入给命令)
示例:(把fiel文件内容广播出去)
wall<file
输出重定向:
具体格式如下实现输出重定向的运算符为
命令>文件名(会把显示的内容写到文件当中)
示例:(把用户密码信息 写到文件中)
cat /etc/passwd >file
使用>运算符时,输出的信息将以覆盖的方式打印到文件fie中,若想保留文件file中原有的内容,可使用运算符“>>”,该运算符将以追加的形式将结果打印到fie文件。
错误重定向:
重定向标准错误信息使用运算符“>”和“>>其格式如下:
命令 2>文件名
说明:
①其中“2”代表标准错误文件的编号,实际上,输入重定向和输出重定向还可写为如下格式
命令 0<文件名
命令 1>文件名
只是当其文件编号0、1出现在重定向符号左侧时,可以被省略。
②可以使用运算符“&”通过文件编号引用文件,该运算符表示“等同于”,如“2>&1”则表示将标准错误重定向到标准输出中。
2.管道
在shell编程中,“|” 被称为管道符号,用于连接两个命令,其格式如下
命令1 | 命令2 | ..... | 命令n
管道可使前一个命令的输出作为后一个命令的输入,由此实现较为复杂的功能。
示例:(在/etc 列出来的列表中 检索init)
ls-l /etc|grep init
3.命令连接符
Shell中提供了一些用于连接符号的符号,包括“;”,“&&” 以及 “||”,使用这些符号,可以将多条shell指令进行连接,使这些指令顺序或根据命令执行结果,有选择地执行,下面将对这些符号的功能分别进行介绍。
- 使用“;”运算符间隔的命令,会按照先后次序依次执行。
示例:批量处理
mkdir text;cd text; touch 23.c;vim 123.c
- 使用“&&”连接符连接的命令,其前后命令的执行遵循逻辑与关系,只有该连接符之前的命令执行成功后,它后面的命令才被执行
示例:tunch拼写错误,则不会继续执行
cd text && tunch 123.c && 123.c
- 使用“||”连接符链接的命令,其前后命令的执行遵循逻辑或关系。只有该连接符之前的命令执行失败时,才会执行后面的命令。
4.文本提取器
Shell中常用awk提取文档或标准输出中的文本信息。awk实际上是一个强大的文本分析工具,该工具是Shel中常用的文本提取命令为awk,该命令类似于常用命令中的grep,都能从指定文本中提取指定信息,不同的是该命令可将文本按指定分隔符分割,并从分割后的文本中提取指定项。
以上就是shell的基本介绍和基础应用,关于shell脚本会持续更新。