Shell script执行方式验证与总结

概述

Shell script有三种执行方式,相对/绝对路径直接执行sh命令执行source命令执行,那这三种方式各有什么区别呢?在此通过test.sh来验证与总结。

验证

新建test.sh

1
2
3
4
5
6
7
#! /bin/bash

# 打印"Hello, world!"
echo "Hello, world!"

# 返回111作为测试码
exit 111

默认权限为

验证./test.sh直接执行方式:

1
$ ./test.sh

执行结果为:

添加x权限,再执行:

1
2
$ chmod u+x test.sh
$ ./test.sh

执行结果为:

查看命令执行状态:

1
echo $?

执行结果为:

可以看出返回码为测试码111,因此:

验证了./test.sh执行方式为打开一个subshell读取再执行,需要x权限

验证sh ./test.sh执行方式:

去除x权限,再执行:

1
2
$ chmod u-x test.sh
$ sh ./test.sh

执行结果为:

查看命令执行状态:

1
echo $?

执行结果为:

文件没有x权限依然执行成功,同时可以看出返回码为测试码111,因此:

验证了sh ./test.sh执行方式亦为打开一个subshell读取Shell script再执行,但不需要x权限

验证source ./test.sh执行方式:

注:source命令即为.命令

1
source ./test.sh

执行结果为:

1
当前shell窗口终止退出

删除test.shexit 111语句,再执行:

执行结果为:

文件没有x权限,且需删除exit语句才正常输出Hello, world!,因此:

验证了sh ./test.sh执行方式为在当前shell上读取执行,不需要x权限

总结

执行方式 subshell? x权限?
./test.sh
sh ./test.sh  
source ./test.sh