Shell脚本是从上到下、从左到右依次执行每一行的命令 执行完一条命令之后,再执行下一条命令。如果在脚本中遇到镶嵌脚本(子脚本)时,先执行子脚本,执行子脚本之后再去执行父脚本剩下的内容。
1.bash script_name 或者 sh script_name
无需执行权限,运行脚本时,脚本会在子shell中运行。
[root@shell ~]# ll test.sh
-rw-r--r-- 1 root root 21 2020-04-20 11:28 test.sh
[root@shell ~]# cat test.sh
#!/bin/bash
ping baidu.com &>/dev/null
[root@shell ~]# pstree | grep sshd
|-sshd-+-sshd---bash---sh---ping
| `-sshd---bash-+-grep
2. source script_name 或者 . script_name
不需要执行权限,脚本执行时会在当前shell下执行
[root@shell ~]# pstree | grep sshd
|-sshd-+-sshd---bash---ping
| `-sshd---bash-+-grep
3. /PATH/script_name 或者 ./script_name
使用路径执行,脚本需要执行权限,脚本会在子shell中运行
[root@shell ~]# ./test.sh
-bash: ./test.sh: Permission denied
[root@shell ~]# ~/test.sh
-bash: ~/test.sh: Permission denied
[root@shell ~]# pstree | grep sshd
|-sshd-+-sshd---bash---test.sh---ping
| `-sshd---bash-+-grep
4. cat script_name | bash
不需要执行权限,脚本会在一个子shell中运行
[root@shell ~]# pstree | grep sshd
|-sshd-+-sshd---bash---sh---ping
| `-sshd---bash-+-grep
5. bash < script_name 或者 sh < script_name
不需要执行权限,脚本运行时会在子shell中执行命令
[root@shell ~]# pstree | grep sshd
|-sshd-+-sshd---bash---sh---ping
| `-sshd---bash-+-grep