- #! /bin/bash
- 在 Shell 脚本中,
#! /bin/bash
是指定脚本使用 Bash 解释器的 shebang 语句。它出现在脚本的第一行,并告诉操作系统使用 Bash 解释器来执行该脚本。- 指定解释器:
#! /bin/bash
指定了使用 Bash 作为脚本的解释器。Bash 是 Unix-like 系统中常见的一种 Shell 解释器。在执行脚本时,操作系统会根据 shebang 语句中的路径找到 Bash 解释器所在位置,并使用它来解释执行脚本内容 - 特定语法支持:Bash 解释器相比其他 Shell 解释器,例如
sh
、dash
等,提供了更多的功能和语法扩展。因此,通过使用#! /bin/bash
,可以确保脚本中使用的特定 Bash 语法和功能能够被正确解释和执行; - 兼容性:在大多数 Unix-like 系统中,Bash 解释器都是默认安装的,并且脚本中使用的许多常见 Shell 语法和命令都是基于 Bash 的。使用
#! /bin/bash
可以提高脚本的可移植性,并确保在不同系统上都能正确执行;
- 指定解释器:
- Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
- 有不同种类的shell,如sh,bash,csh,最常用的是bash。
- 执行sh脚本文件的三种方法
-
./hello.sh:必须是可执行文件,需要先给sh脚本文件赋予可执行权限chmod +x hello.sh sh hello.sh:可以不是可执行文件,即不chmod ug+x hello.sh赋予可执行权限 source hello.sh:可以不是可执行文件,即不chmod ug+x hello.sh赋予可执行权限
source hello.sh
会在当前进程下直接执行sh文件,这个好处就是可以直接访问 作用域为当前进程 的变量./hello.sh
和sh hello.sh
会重新创建一个全新的子Shell进程(fork+exec)来执行sh文件- 1、fork是复制进程,它会复制当前进程的副本(不考虑写时复制的模式),以适当的方式将这些资源交给子进程。所以子进程掌握的资源和父进程是一样的,包括内存中的内容,所以也包括环境变量和变量。但父子进程是完全独立的,它们是一个程序的两个实例。
- 2、exec是加载另一个应用程序,替代当前运行的进程,也就是说在不创建新进程的情况下加载一个新程序。exec还有一个动作:在进程执行完毕后,退出exec所在的shell环境。
- export关键字(环境变量)
- 由于使用了exec,替代了fork出来的子shell进程,又因为不同进程间的数据是无法共享的,所以无法访问父Shell进程创建的局部变量,除非使用
export
关键字,如export name = lzm
,这样的话,子进程会先在当前进程中查找name,没找到的话会一直递归到父进程中查找。 - 开启或者关闭一个子bash
-
bash:开启一个子bash exit:退出当前bash echo $$:查看当前bash的进程号
执行shell脚本
最新推荐文章于 2025-05-17 08:08:55 发布