shell脚本执行方式
Linux系统中shell脚本有三种执行方式,分别为直接运行,利用解释器运行,source命令执行。
直接运行
直接运行脚本的前提需要该文件具有可执行权限,可以使用chmod +x ./scriptName.sh
授权。
直接运行脚本文件本质就是使用shell脚本的绝对路径运行,运行格式为./scriptName.sh
或者/path/to/scriptName.sh
。
举例:创建~/test.sh
文件(~
符号代表/home
家目录)
文件内容如下所示:
使用chmod +x ./test.sh
赋予可执行权限:
./test.sh
运行和/root/test.sh
运行:
在使用该运行方式时,虽然为该文件赋予了可执行权限,但是不能直接使用该文件名称运行,直接使用名称运行时,Linux会默认从环境变量路径中查找,如果该文件没有放置在环境变量中则会报错:command not found
这种也可以解决,只要将当前目录添加进入环境变量即可。
解释器运行
解释执行就是使用sh解释器运行,包括sh,bash这些解释器,这个运行方式不需要脚本文件拥有可执行权限。
再使用前面的例子,首先使用chmod -x
去除可执行权限,再使用bash
解释运行。
运行方式:bash
后接文件。
source命令执行
source
命令执行又称为当前shell环境执行,这种执行方式与之前的执行方式的不同之处在于它不会创建新的子shell执行脚本,而是在当前的shell环境中直接运行脚本。这种方式运行不设置环境变量的脚本的时候与前两种方式感觉不到明显的区别,但是如果这个脚本设置了环境变量,就能感觉到。
运行方式:source script.sh
或. script
,这两种方式等价。
先运行上述的例子。
这里明显感觉不到区别,但是我们可以写一个需要设置环境变量的脚本
举例:创建set_path.sh
文件,文件内容如下所示:
这个脚本修改了PATH
变量,添加了家目录,先使用直接运行或bash运行,查看,再查看PATH
变量是否改变,然后使用source执行进行查看。
直接运行和bash运行结果:
source运行结果:
可以看到前面两种的执行方式当前的环境变量没有改变。
基于这种区别,可以直接使用source去刷新~/.bashrc
中设置的环境变量,而不需要使用su
去重新登陆来刷新
此处将
/root
添加进入了环境变量,我再使用test.sh
的方式运行,查看会不报错。(赋予可执行权限)