
Shell本身是用C语言编写的程序,它是用户使用Linux的桥梁. Shell既是命令语言又是编程语言. 作为一种命令语言,它可以交互解释和执行用户输入的命令. 作为一种编程语言,它定义了各种变量和参数,并提供了许多仅在高级语言中可用的控制结构,包括循环和分支.
尽管它不是Linux系统核心的一部分,但它以并行方式调用系统核心的大多数功能来执行程序,创建文件和协调各种程序的操作. 因此,对于用户而言,shell是最重要的实用程序. 深入了解并精通Shell特性和使用方法是充分利用Linux系统的关键.
可以说,shell使用的熟练程度反映了用户使用Linux的熟练程度.
Shell有两种执行命令的方式:
交互式(Interactive): 解释并执行用户的命令. 当用户输入命令时,命令行管理程序将解释并执行该命令.
•批处理: 用户预先编写了一个Shell脚本(Script),其中包含许多命令,因此Shell可以一次执行这些命令,而不必一一键入命令.
Shell脚本与编程语言非常相似. 它们还具有变量和流控制语句. 但是,shell脚本无需编译即可解释和执行. Shell程序逐行读取并执行脚本中的这些命令,这等效于用户将脚本放入命令行中. 逐行命中Shell提示符以执行.
Shell初学者请注意,在普通应用程序中,建议您不要使用root帐户运行shell. 作为普通用户,无论您是有意还是无意,都无法破坏系统. 但是,如果它是根目录,那就不一样了. 仅输入几个字母可能会导致灾难性的后果.
几个常见的壳
如上所述,Shell是一种脚本语言,因此必须有解释器才能执行这些脚本.
Linux上常见的shell脚本解释器是bash,sh,ash,csh和ksh,它们在传统上被称为一种shell. 我们通常会说有几种Shell,实际上是在谈论Shell脚本解释器.
重击
Bash是Linux系统使用的默认外壳程序. Bash由Brian Fox和Chet Ramey共同完成. 它是BourneAgain Shell的缩写. 内部命令有40条.
Linux使用它作为默认外壳程序,因为它具有如下特征:
•您可以在DOS下使用类似于doskey的功能,使用箭头键查看并快速输入和修改命令.

•通过搜索匹配项自动给出以某个字符串开头的命令.
•包含其自己的帮助功能,您可以通过在提示符下键入help获得帮助.
sh
sh由Steve Bourne开发,是Bourne Shell的缩写. 各种UNIX系统都配备了sh.
灰
烟灰壳由肯尼斯·阿尔姆奎斯特(Kenneth Almquist)撰写. 它是Linux中系统资源最少的小型外壳. 它仅包含24个内部命令,因此使用起来很不方便.
csh
csh是Linux的相对较大的内核. 它由以威廉·乔伊(William Joy)为代表的47位作者组成,并拥有52条内部命令. 该外壳实际上指向/ bin / tcsh之类的外壳,也就是说,csh实际上是tcsh.
ksh
ksh是Eric Gisin编写的Korn shell的缩写,带有42个内部命令. 此Shell的最大优点是,它几乎与ksh的商业发行版完全兼容,因此您可以尝试商业版本的性能而无需花钱购买商业版本.
Shell与编译语言之间的区别
一般而言,编程语言可分为两类: 编译语言和解释语言.
编译语言
许多传统的编程语言,例如Fortran,Ada,Pascal,C,C ++和Java,都是编译语言. 此类语言需要事先将我们的源代码转换为目标代码. 此过程称为“编译”.
运行程序时,直接读取目标代码. 由于编译后的目标代码非常接近计算机的底层,因此执行效率非常高,这是编译语言的优势.

但是,由于编译语言大多在底部运行,并处理字节,整数,浮点数或其他机器级对象,因此通常要实现一个简单功能就需要大量复杂代码. 例如,在C ++中,很难执行简单的操作,例如“将一个目录中的所有文件复制到另一目录中”.
口译语言
口译语言也称为“脚本语言”. 执行此类程序时,解释器需要读取我们编写的源代码并将其转换为目标代码,然后由计算机运行. 因为每次执行程序都会增加编译过程shell脚本语言有哪些,所以效率降低了.
使用脚本编程语言的优势在于它们大多在比编译语言更高的级别上运行,并且可以轻松处理文件和目录等对象;缺点是它们通常不如编译语言有效. 但是,在权衡的情况下,通常值得使用脚本编程: 一个小时编写一个简单的脚本,用C或C ++编写相同的函数,可能需要两天时间,并且通常,脚本执行速度为已经足够快,足以让人们忽略它的性能问题. 脚本语言的示例是awk,Perl,Python,Ruby和Shell.
何时使用Shell
因为Shell似乎是UNIX系统之间的通用功能,并且已由POSIX标准化. 因此,只要一次“小心编写” Shell脚本,就可以将它们应用于许多系统. 因此,使用Shell脚本的原因基于:
简单性: Shell是一种高级语言;通过它,您可以简洁地表达复杂的操作.
可移植性: 使用POSIX定义的功能,无需修改即可在不同系统上执行脚本.
•易于开发: 功能强大且有用的脚本可以在短时间内完成.
但是,考虑到Shell脚本的命令限制和效率,在以下情况下通常不使用Shell:
1. 资源密集型任务,尤其是在需要考虑效率的情况下(例如,排序,哈希等).
2. 需要处理大型任务的数学运算,特别是浮点运算,精确运算或复杂的算术运算(这种情况通常使用C ++或FORTRAN处理).
3. 有一个跨平台(操作系统)的移植要求(通常使用C或Java).
4. 复杂的应用程序,必须使用结构化编程时(需要对变量,函数原型等进行类型检查).
5. 对于影响系统全局性的关键任务应用程序.

6. 具有高安全性要求的任务,例如,您需要一个功能强大的系统来防止入侵,破解,恶意破坏等.
7. 该项目由一系列相关部分组成.
8. 需要的文件操作.
9. 需要多维数组支持.
10. 需要数据结构支持,例如链表或数字数据结构.
11. 必须生成或操作图形界面GUI.
12. 需要直接的操作系统硬件.
13. 需要I / O或套接字接口.
14. 需要使用库或旧代码的接口.
15. 私有的,封闭源代码的应用程序(shell脚本将代码放在一个文本文件中,在世界范围内都可以看到).
如果您的应用程序符合以上任何条件,请考虑使用更强大的语言(例如Perl,Tcl,Python,Ruby)或更高级别的编译语言(例如C / C ++或Java). 即使这样,您仍会发现在开发步骤中使用外壳对应用程序进行原型设计也非常有用.
第一个Shell脚本
打开一个文本编辑器,创建一个新文件,扩展名为sh(sh代表shell),该扩展不影响脚本的执行,只看名称和理解即可,如果使用php编写一个shell脚本,扩展名为php.
输入一些代码:
复制代码,代码如下:

#!/ bin / bash
回声“ Hello World!”
“#!”是一个常规标记,它告诉系统该脚本需要执行哪个解释器,即使用哪个外壳程序. echo命令用于将文本输出到窗口.
有两种方法可以运行Shell脚本.
作为可执行程序
将上述代码另存为test.sh和cd到相应目录:
复制代码shell脚本语言有哪些,代码如下:
chmod + x ./test.sh#启用脚本以执行权限
./ test.sh#执行脚本
请注意,它必须写为./test.sh,而不是test.sh. 其他二进制程序也是如此. 直接编写test.sh. linux系统将在PATH中搜索test.sh,只有/ bin,/ sbin,/ usr / bin,/ usr / sbin等位于PATH中,您当前的目录通常不在PATH中,因此您可以找不到写为test.sh的命令,必须使用./test.sh告诉系统它在当前目录中找到.
以这种方式运行bash脚本,第一行必须正确编写,以便系统可以找到正确的解释器.
这里的“系统”实际上是shell应用程序(假设是Windows资源管理器),但是我故意将其编写为系统,这很容易理解. 由于此系统引用外壳程序,因此使用/ bin / sh作为解释器的脚本可以保存第一行吗?是的.
作为解释器参数
这种运行方式是直接运行解释器,其参数是shell脚本的文件名,例如:
复制代码,代码如下:
/ bin / sh test.sh
/ bin / php test.php
以这种方式运行的脚本不需要在第一行中指定解释器信息,并且编写它们是没有用的.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-243303-1.html
水
台湾如果敢宣布独立
现在人家到你家门口来寻衅