我的两分钱
迟到了这个 SO 问题,阅读 fedorqui's answer,我认为 "programming language" 与 "command language" 不完全相同,意思是一种语言旨在运行命令。
关于 turing 考虑,是的,你可以...我个人围绕 bash 写了很多 libraries(围绕监控、备份、系统管理员、网络等) .),但显然是为了编写一个程序,
您必须使用真正的编程语言。
然而
bash 是一个shell(如sh 和其他shell)!意思是一种整体聚合器语言,或超级语言。
首要目标是成为一个交互式命令处理器,
为了使用和维护posix系统。
他的第一个应用程序之一是创建wrappers,以便为运行用其他语言编写的程序准备环境。
所以这个命令处理器是
非常适合系统、文件系统、网络和许多管理任务,因为
它是交互式的,并且使用他的历史使 创建脚本 工作变得简单。
他的真正实力
由于该语言旨在处理ios、forks、fifos,并且因为posix 表示everything is a file,所以shell 脚本通常可以处理一切 em>,直接或使用 others 工具/二进制文件/应用程序。这种语言旨在
围绕一切创建条件、执行组和交互。
这可以打开系统、网络、物联网等之间的大量交互......
脚本可以作为示例(进一步参见我的 shell 连接器 演示)。
1.file descriptors
2.同时打开数据库、SSH 连接和日志文件。
2. strong> 创建 SQL(临时或非临时)表
3. 执行循环,检查 DB 上的事件、SSH 连接或其他...
4. 与 DB 和/或 SSH 交互...
5. 关闭所有 file descriptors(DB、SSH、日志文件等) )
曼德布罗样本:
Mecki's anwers 上的评论展示了如何使用 bash 处理其他二进制文件的一个很好的示例(bc 用于 Mandelbrot)...
shell 用于运行 bc 并汇总他的答案。
- 如果脚本为每个计算执行一次分叉,则此脚本将花费 许多小时在 80 列终端上绘制 Mandelbrot。
- 第一个改进:只运行一个后台 fork 到
bc -l 以提交所有计算,将执行时间降低到8 分钟。
-
2nd improvement: 将 iterate 循环(最多 2000 个测试)传递给
bc,丢弃
自己的执行时间8秒。
-
3nd improvement: 创建更多背景
bc 用于同时计算多个点,以便使用多核,将执行时间近似地除以可用内核...(感谢Léa Gris 的贡献,帮助使这个posix 兼容,多核想法和添加颜色,使它接近美丽,我忍不住发布他的结果)
更多示例
我编写了一些脚本来展示这种强大的并行化功能:
为了进行一些监控,检查差异等,我们可以创建一个脚本来打开许多同时连接
到许多不同的目标,使用netcat、sql-client、ftp、open-ssl s_client、ssh 之一或其他...
...能够在需要时运行sha1sum、grep、xmlint 或bc(如果尚未后台运行),同时连接保持打开...
结论
shell 是一种超级语言,可用于使用多种语言的许多程序聚合一个复杂的应用程序。