我为什么要学习Shell编程呢?在现实世界中可以用它做什么?你能告诉我一些可以用它或一些特殊功能完成的强大功能,以便说服我现在应该开始学习shell编程吗?
答案 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
!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的实用程序员详细讨论了这个问题。