谁能让我知道编码指南以及Unix shell脚本的代码示例,通过使用这些代码可以在大多数当前的shell上运行,如ksh,bash,csh等。大多数时候,我为ksh编写的一些代码不能在正常的sh上运行。我想让我的代码具有最大的可移植性。我的大部分代码都围绕着if、elifs和whiles、fors以及子shell的返回码捕获(主要是运行SQL脚本,我想要得到一些返回码,比如处理的行数、返回码、SQL脚本的错误码)。
另外,谁能让我知道哪些shell特定的代码可以很容易地移植到其他shell?有人能给我推荐正确的教程和/或示例代码吗?
发布于 2010-10-25 15:19:52
为自己准备一个7th Edition Unix Programmer's Manual (Vol 1),并按照这里描述的(伯恩)外壳表示法编程。如果您能找到合适的手册,您实际上可以升级到System V (Bourne) shell;它有一些额外的特性,比如功能,这是第7版shell所没有的,而且它们基本上在任何地方都可用。(这是一个非常保守的立场-但它将为您提供最大的可移植性。)
另一个问题是选择使用哪些命令,以及对这些命令使用哪些选项。例如,GNU grep有许多其他地方没有的有用选项。GNU sed类似地具有在其他地方不可用的扩展。如果您编写shell脚本来使用这些扩展,那么您的代码将是不可移植的,即使所有的shell都正确地理解语法。
我建议您了解POSIX标准所说的可移植性。大多数系统通常都支持大多数POSIX功能,但每个系统通常会添加一些额外的选项和功能,这些选项和功能并不总是广泛可用的。注意,POSIX shell确实有一些特性,特别是用$(...)命令替换原来的Bourne shell中没有的反标记。您将不得不决定,更现代的符号带来的清晰度是否值得(名义上)的可移植性损失。
此外,Autoconf shell指南主要关注最大的可移植性。然而,结果是一个相当生硬的shell脚本版本,尤其是因为它必须与m4宏处理器交互工作,这导致了一些额外的约束。
请注意,基本上不可能编写可移植的shell脚本来使用Bourne/Korn/POSIX shell系列和C Shell系列。有一些strong arguments可以得出这样的结论:“你不应该用should编写脚本”。
发布于 2010-10-26 03:31:40
对于可移植性,简短的答案是为最小公分母编写脚本,即Bourne shell (sh),并避免具有不兼容语法和serious limitations的lowest。Bourne shell应该是普遍可用的,并且大多数系统启动和管理脚本都是为它编写的。
您提到的需求中的所有功能在sh中都可用。缺少的主要功能之一是对数组的支持,但这是可以解决的。
要记住的一件事是,shell脚本的大部分功能都是由外部实用程序提供的,这些实用程序可以从任何shell访问。
发布于 2010-10-25 14:52:26
为什么不用perl或python编写脚本呢?
https://stackoverflow.com/questions/4012333
复制相似问题