认识
GNU Bash manual:https://www.gnu.org/software/bash/manual/bash.html
怎样写出规范的 shell 脚本(仅限 Scripting with style)
https://www.tutorialspoint.com/unix/case-esac-statement.htm
1)理论:掌握 Shell 脚本的编写方法,及与 Shell 编程有关的内容;
2)实践:能够进行 Shell 编写,并且编写出可移植性高的脚本是个非常重要的目标;
书籍文章:
1)《Linux Shell 脚本攻略(第 2 版)》
官方文档:
针对 Bash 的学习,我们将沿用 Bash Reference Manual 的结构,逐步深入学习;
组成
// ONHD 我们是 Shell 的用户,暂时不需要关心 Shell 实现的内部架构。
Shell(抽象概念)
shell 只是一个执行命令的宏处理器。术语宏处理器是指扩展文本和符号以创建更大表达式的功能;
Unix shell 既是命令解释器又是编程语言。作为命令解释器,shell 为丰富的 GNU 实用程序集提供了用户界面。编程语言特性允许组合这些实用程序。可以创建包含命令的文件,并使其本身成为命令。这些新命令与 /bin 等目录中的系统命令具有相同的地位,允许用户或组建立自定义环境以自动执行他们的常见任务;
可以交互或非交互地使用外壳。在交互模式下,它们接受键盘输入。当以非交互方式执行时,shell 执行从文件中读取的命令;
我们这里学习的脚本编程,属于非交互模式运行;
Bash(具体实现)
Bash 是 GNU 操作系统的 shell 或命令语言解释器。该名称是“Bourne-Again SHell”的首字母缩写词,是对 Stephen Bourne 的双关语,Stephen Bourne 是当前 Unix shell sh 的直接祖先的作者,它出现在 Unix 的第七版贝尔实验室研究版中;
Bash 是众多 Shell 的一种,还有其他很多类型的 Shell 实现:sh csh ksh dash;
Bash 在很大程度上与 sh 兼容,并结合了 Korn shell ksh 和 C shell csh 的有用特性。它旨在成为 IEEE POSIX 规范(IEEE 标准 1003.1)的 IEEE POSIX Shell 和工具部分的一致实现。它为交互和编程使用提供了对 sh 的功能改进;
应用
该笔记将记录:与 Shell 相关的概念术语,以形成对 Shell 的基本认识。
# 08/20/2019 起初这个分类是为 UNIX Shell 准备的,现在开始也准备加入部分 PowerShell 相关的技术。
# 08/25/2024 现在,该部分仅用于存储 Linux Shell Scripting 相关内容;
改进
explainshell.com
解释 Shell 命令的网站;
该站点的源码在 GitHub 中:https://github.com/idank/explainshell
针对复杂处理
最初版本我们使用 Shell 实现了批量处理,但是,太慢了,也进行了优化,最后才发现瓶颈在于 Shell 中的 for 循环内部的关联数组赋值,当数据量比较大的时候,for 循环的内部关联数组操作特别慢。后来换 Python 重写,速度有了明显。所以,在后续工作中,但凡涉及到大量的数据处理或者业务功能方面的东西,不再使用 Shell 脚本处理。而只用 Shell 处理系统维护管理性的任务。
参考