我为什么要学习Shell编程?

时间:2010-12-16 18:50:38

标签: shell programming-languages

我为什么要学习Shell编程呢?在现实世界中可以用它做什么?你能告诉我一些可以用它或一些特殊功能完成的强大功能,以便说服我现在应该开始学习shell编程吗?

6 个答案:

答案 0 :(得分:19)

学习shell编程有十亿个理由。其中一个主要原因是系统管理。

Here is an example某人需要根据同一目录中的另一个文件重命名〜750个文件。这是通过3行shell脚本完成的。要获得更多示例,只需使用标记[bash], [sed] or [awk]搜索问题。

当有人让我向他们展示一个很酷的“shell编程”的例子时,我总是向他们展示这个awk 1-liner(甚至可能是1-worder?)。它将过滤列表以仅显示唯一值而不更改原始顺序。这很重要,因为大多数其他解决方案要求您首先对列表进行排序,这会破坏原始订单。

$ echo -e "apple\npear\napple\nbanana\nmango\npear\nbanana" | awk '!a[$0]++'
apple
pear
banana
mango

awk命令的说明

!a[$0]++发生了非排序的独特魔法。由于awk支持关联数组,因此它使用当前记录(aka line)$0作为数组a[]的键。如果之前没有看到该密钥,a[$0]将计算为0(零),这是awk未设置索引的默认值。然后,我们否定此值以在该键的第一个出现位置返回TRUE。然后a[$0]会递增,以便此键上的后续点击将返回FALSE,因此永远不会打印重复值。我们还利用了这样一个事实:如果表达式返回print $0并且没有给出TRUE,则awk将默认为{ commands }(打印当前记录/行)。

如果您仍然不理解,请不要担心,这是一个非常简洁和优化的版本,可能是一个更长的awk脚本。

答案 1 :(得分:7)

老兄,如果你不想,你现在不需要学习shell编程。但如果您想在计算机上实际执行某些操作,它就会派上用场。

几乎任何类型的计算机都将使用其本机shell代码编写系统脚本。因此,如果您想了解并配置它的功能,您将需要学习shell脚本。

另一个有用的东西是它将教你如何正确使用命令行。您无法使用工具(例如cp -r foo bar)或简单的通配(例如rm *.o)来完成所有工作;即使像大规模重命名这样简单的事情也需要循环。对于这种工作,shell是最简单,最合适的工具。

答案 2 :(得分:3)

前几天我需要报警。

sleep 20m && madplay song.mp3

当您了解shell编程时,您会发现它的用途可以简化您的生活。之前的例子很简单,比有用的更有趣,但它可以节省你在文件系统操作和miriad其他事情上的大量时间。 google query可以给你一个想法。

答案 3 :(得分:1)

Shell编程对于一些可以做很多事情的快速单行命令非常有用。最大的好处是您不必保存代码。

但是,您可以通过使用python命令行轻松替换shell编程。

答案 4 :(得分:1)

大多数人使用shell脚本的第一件事就是自动完成一项简单的任务,比如备份。我的第一个脚本就是玩Rsync。然后用cron调用脚本。

其他有趣的事情:也许您需要搜索一堆文本并在多个文件中执行查找和替换。或者你想保留昨天存在的主目录的tarball。或者你在shell中做的任何其他多余的事情。

答案 5 :(得分:0)

Shell编程允许您对任务进行切片和切块,如果您使用GUI,这些任务会非常缓慢。

Hunt和Thomas的实用程序员详细讨论了这个问题。