可能重复:
我应该使用哪个Linux shell?
我开始熟练掌握Linux环境,并且正在尝试从命令行脚本中select一个select武器(因为我仍然是一个很大的n00b),这将帮助我(和其他人)pipe理,testing并pipe理在* NIX环境中运行的一组服务器端应用程序。
我的问题是:当考虑到以下标准时,什么是优先级命令shell?
学习/理解一个从未接触过shell脚本的初级开发者有多容易?
那里有大量的开发人员知道这个shell脚本吗?
是安全和易于使用 – 脚本错误将保持沉默或提供智能的错误输出,它会让不经意的射击自己的脚?
它是多么便携? – 我可以期待在OpenSolaris以及Redhat,FreeBSD上运行相同的脚本吗? (授予特定操作系统的命令语法和选项将相应地改变)
标准如何? 预计它将被包含在* NIX的大部分发行版中还是必须另外安装?
我知道那里有一些阵营,他们对特定的命令壳抱有强烈的感情,我只是在寻找知情的意见。
现在,几乎任何非嵌入式(或大型嵌入式)操作系统都具有POSIX:2001(又名单一Unix v3兼容性层)。 这在unix平台(Linux,Mac OS X,Solaris,* BSD等)上是原生的,并且可以在其他平台(如Windows和Android)上安装。 POSIX指定一种shell语言,通常称为POSIX sh。 这种语言来源于Bourne shell。
大多数unix系统有POSIX sh:ksh或bash两个实现之一,与POSIX相比,它们具有更多有用的特性。 但是一些不太主流的系统(特别是嵌入式系统)可能只有POSIX规定的特性。
鉴于你的目标,我看到三个选择:
忘记csh脚本,忘记zsh如果你想共同的默认可用性。
另请参见主流* NIX shell之间的根本区别是什么? 特别是我的答案的“脚本”部分。
请注意,shell编程涉及shell之外的其他实用程序。 POSIX指定那些其他实用程序。 “Bash加上其他POSIX工具”是一个合理的选择,与“POSIX工具(包括sh)”不同。
csh几乎总是错的 。
据说zsh是现在最强大的,所以我建议尝试一下。
为什么我更喜欢zsh(Z shell) bash :
for file in ./**/*.java; do ...
for file in ./**/*.java; do ...
(我的意思是./**/*.ext
) rm *
🙂 dmdomi[tab]
,它建议dnddomainname
。 java
想要类名作为第一个参数,zsh会提示包中的所有类和所有子包。 但是你并不仅限于zsh。 如果有什么不适合你的话,你可以用bash或sh来写。 这就是脚本顶部的"#!/bin/bash"
。 🙂
要快速启动,使用我的.zshrc配置: http : export LANG="pl_PL.UTF-8"
你应该改变的唯一的是export LANG="pl_PL.UTF-8"
。 你可能不希望波兰的区域设置。
任何* nix shell的Shell脚本通常看起来很简单。 容易的事情通常是容易的,有时候困难的事情是容易的,有时容易看起来很难。 没有贝壳特别是比在这方面的其他人更好,但有些更糟(我不能认真推荐csh)。 有人会说bash是最糟糕的“现代”贝壳,这可能是真的,但是你无法完全逃避。
有一个理由要说,使用最流行的外壳最好是可维护性,因为Windows是最好的(我不是这么说的):很容易找到你可以雇用谁知道如何使用它。 比起ksh或者zsh,只有更多的人对bash特有的功能至少有一个熟悉的感觉。 找到真正了解他们在做什么的人是另一回事。
所有的炮弹都有各种各样的陷阱,角落案例和奇怪的行为。 主要归结于你习惯的。 在脚下自我拍摄是我所说的宏伟的Unix传统,没有任何* nix shell能真正保证你的安全。
几乎每个你会看到的外壳几乎可以在任何平台上移植。 即使这是真的,你不一定能够在三个不同的盒子上运行相同的(比如说)bash脚本,除非你小心使用了哪些工具以及你通过了哪些选项。 编写可移植的shell脚本是很难的,因为与它们写的shell无关。
几乎每个Linux默认都使用bash,而且大多数shell都可用。 FreeBSD在默认情况下包括sh,csh和tcsh,而bash和其他的则是在ports中。 很久以前,Mac OS X默认使用tcsh,但默认情况下它使用bash,包括zsh以及最常见的shell。 除此之外,我无法评论。
我个人使用(主要是)惰性bash。 如果我不熟悉它,我会用zsh代替。
bash是标准,很好的交互使用(很好的完成支持很多程序,历史,readline支持,多种字符串扩展)。 对于一个shell(数组和散列,引用,字符串操作)也是很好的脚本。 尽管编写可靠的脚本需要您学习更多。
如果你想让你的程序能够增长,使用精细的数据结构,并使用一些有用的库,你应该学习像python,ruby或perl这样的语言。 这些人大部分都有交互式口译员,不像外壳那么方便,但是对于快速测试是有用的。 对于Python而言,IPython特别有用; 它让你很容易探索文档,可以加载和重载源代码,包括一个调试器。 它还包含一些标准的shell命令,可以通过在标准shell中添加一个!
。