特点:提前赋予脚本以执行权限。

3、bash命令或sh命令调用

1
2
cd test
bash test.sh

1
2
cd test
sh test.sh

1、相对路径方式 - 切换到shell脚本所在的目录(工作目录)执行shell脚本

1
2
cd /test  
./test.sh

特点:提前赋予脚本以执行权限。

2、绝对路径方式

1
/test/test.sh

特点:可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将test.sh作为参数传给sh(bash)命令来执行的。这时不是test.sh自己来执行,而是被调用执行,所以不要执行权限,不用指定bash路径自然也好理解.

4、在当前的shell环境中执行bash shell脚本

1
2
cd test
. test.sh

1
2
cd test
source test.sh

特点:使脚本内容在当前shell里执行,而不是单独开子shell执行。

上述四种方法的区别

前三种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。第四种是使脚本内容在当前shell里执行,而不是单独开子shell执行。

开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,不做特殊通道处理的话,父shell是不可见的。
而在当前shell中执行的话,则所有设置的环境变量都是直接生效可用的。

pstree下的验证

  • 1,2,3种执行方式下的pstree显示
1
2
├─sshd─┬─sshd───bash───bash───top  
│ └─sshd───bash───pstree
  • 第4种执行方式下的pstree显示
1
2
├─sshd─┬─sshd───bash───top  
│ └─sshd───bash───pstree