1.理解Shell脚本的概念
物理终端=>软件终端tty =>终端模拟器=> shell
tty或者说终端最开始指的是获取用户输入并输出的物理设备,比如电传打字机在linux.中是接收用户输入、输出结果的终端仿真软件,比如我们用的 mac terminal、iterm2等,更强输入辅助功能、画面绘制输出的模拟终端器; 而tty变成一个虚拟概念,是linux的一个程序,每个终端模拟器关联一个虚拟tty,和内核打交道。我们可以在终端模拟器中输入tty查看关联到的虚拟tty ,bash是shell的—种具体实现,可以理解成实例和类的关系。
2.了解Shell脚本的发展
- 除了替代vo shell, sh还有几个优点,把控制流程,循环,变量引入了脚本,提供了一种更具功能性的语言
- 主流 Linux系统使用的shell,许多都以它为锚点。
- bash是sh的超集,可以直接执行大部分sh 脚本。
- Bash在兼容Bourne shell脚本编程的同时,集成了Korn shell和C shell 的功能,包括命令历史,命令行编辑,目录堆栈(pushd和popd) ,,—些实用环境变量,命令自动补全等。
3.Shell脚本的构成
shell不仅提供了与内核和设备交互的方法,还集成了一些今天软件开发中通用的设计模式(比如管道和过滤器),具备控制流程,循环,变量,命令查找的机制
既是命令解释器,也是一门编程语言,作为命令解释器,它提供给用户接口,使用丰富的GNU工具集,第三方的或者内置的,比如cd.pwd、exec.test. netstat等等
4.配置文件加载
- 通过系统用户登录默认运行的shell非登录交互式运行shell
- 执行脚本运行非交互式shell
- 如果取得bash需要完整的登录流程,我们称之为login shell,比如ssh远程登录一台主机 不需要登录的bash我们称为non-login bash,比如在原来的bash 中执行bash开启子进程、执行一些外部命令如果修改了配置文件,不会立即生效,需要我们重启终端或者执行source命令