什么是shell脚本
编辑shell脚本是一种计算机程序,旨在由Unixshell(一种命令行解释器)运行。shell脚本的各种方言被认为是脚本语言。shell脚本执行的典型操作包括文件操作、程序执行和打印文本。设置环境、运行程序并执行任何必要的清理或日志记录的脚本称为wrapper。
该术语也更普遍地用于表示运行操作系统外壳的自动化模式。每个操作系统都为这些功能使用一个特定的名称,包括批处理文件(MSDos-Win95流,OS/2)、命令过程(VMS)和shell脚本(WindowsNT流和第三方衍生产品,如4NT——文章位于cmd。exe),与大型机操作系统相关联的术语很多。
生命周期
编辑Shell脚本通常用作软件开发的初始阶段,并且通常会在以后转换为不同的底层实现,最常见的是转换为Perl、Python或C。解释器指令允许实现细节完全隐藏在脚本中,而不是作为文件扩展名公开,并提供不同语言的无缝重新实现,而不影响最终用户。
虽然带有“.sh”文件扩展名的文件通常是某种shell脚本,但大多数shell脚本没有任何文件扩展名。
shell脚本优点和缺点
编辑编写shell脚本的xxx优点可能是命令和语法与在命令行中直接输入的完全一样。程序员不必切换到完全不同的语法,如果脚本是用不同的语言编写的,或者使用编译的语言,他们就会这样做。
通常,编写shell脚本比用其他编程语言编写等效代码要快得多。许多优点包括简单的程序或文件选择、快速启动和交互式调试。shell脚本可用于提供围绕现有程序的排序和决策链接,对于中等大小的脚本,没有编译步骤是一个优势。解释性运行使将调试代码写入脚本并重新运行以检测和修复错误变得容易。非专家用户可以使用脚本来定制程序的行为,而shell脚本为多处理提供了一些有限的范围。
另一方面,shell脚本容易出现代价高昂的错误。诸如rm-rf*/(而不是预期的rm-rf*/)之类的无意输入错误是Unix社区的民间传说;一个额外的空格将命令从删除当前目录中包含的所有子目录的命令转换为删除文件系统根目录中所有内容的命令。类似的问题可以将cp和mv变成危险的武器,滥用>重定向可以删除文件的内容。由于许多UNIX命令的名称只有一个字母不同,这使得问题更加严重:cp、cd、dd,df等
另一个显着的缺点是执行速度慢,并且需要为几乎每个执行的shell命令启动一个新进程。当一个脚本的工作可以通过设置一个管道来完成时,高效的过滤器命令在其中执行大部分工作,减速就会得到缓解,但复杂的脚本通常比执行等效任务的传统编译程序慢几个数量级。
不同平台之间也存在兼容性问题。Perl的创建者LarryWall有一句名言:“移植shell比移植shell脚本更容易”。
同样,更复杂的脚本可能会遇到shell脚本语言本身的限制;这些限制使得编写高质量的代码变得困难,并且各种shell的扩展以改善原始shell语言的问题可能会使问题变得更糟。
使用某些脚本语言的许多缺点是由语言语法或实现中的设计缺陷造成的,不一定是使用基于文本的命令行强加的;有许多shell使用其他shell编程语言,甚至是成熟的语言,如Scsh(使用Scheme)。
其他操作系统上的Shell脚本
编辑互操作性软件,例如Cygwin、MKSToolkit、Interix(在MicrosoftWindowsServicesforUNIX中可用)、HamiltonCshell、UWIN(AT&TUnixforWindows)等允许Unixshell程序在运行WindowsNT和它的继任者,在MS-DOS-Windows95分支以及OS/2的早期MKSToolkit版本上失去了一些功能。至少三个适用于Windows类型操作系统的DCL实现——除了XLNT,一种与命令外壳、Windows脚本宿主和CGI一起使用的多用途脚本语言包编程——也可用于这些系统。MacOSX及后续版本也类似于Unix。
除了上述工具之外,一些POSIX和OS/2功能也可以与WindowsNT操作系统系列(直至Windows2000)的相应环境子系统一起使用。第三个16位子系统通常称为MS-DOS子系统,它使用随这些操作系统提供的Command.com来运行上述MS-DOS批处理文件。
控制台替代品4DOS、4OS2、FreeDOS、PeterNorton的NDOS和4NT/TakeCommand为WindowsNT风格的cmd.exe、MS-DOS/Windows95批处理文件(由Command.com运行)、OS/添加了功能2的cmd.exe和4NT分别与它们增强的shell相似,并且与WindowsScriptHost的集成度更高,它预装了VBScript、JScript和VBA三个引擎,许多第三方引擎都可以被添加,Rexx、Perl、Python、Ruby和Tcl在4NT和相关程序中具有预定义的函数。PCDOS与MS-DOS非常相似,而DRDOS更加不同。早期版本的WindowsNT能够通过OS/2子系统运行现代版本的4OS2。
根据定义,脚本语言是可以扩展的;例如,MS-DOS/Windows95/98和WindowsNT类型系统允许shell/批处理程序调用KiXtart、QBasic、各种BASIC、Rexx、Perl和Python实现、Windows脚本主机及其安装的引擎等工具.在Unix和其他POSIX兼容的系统上,awk和sed用于扩展shell脚本的字符串和数字处理能力。Tcl、Perl、Rexx和Python具有图形工具包,可用于为造成速度瓶颈的shell脚本编写函数和过程(C、Fortran、汇编语言和c更快),并添加shell语言中不可用的功能例如套接字和其他连接功能、繁重的文本处理、如果调用脚本没有这些能力则处理数字、自编写和自修改代码、递归、直接内存访问、各种类型的排序等技术,在主脚本中很难或不可能,等等。VisualBasicforApplications和VBScript可用于控制电子表格、数据库、各种类型的脚本程序、电信软件、开发工具、图形工具和其他可通过组件对象模型访问的软件等事物并与之通信。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/131947/