一、在新的进程中运行Shell脚本
以下3种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。
1、./test.sh
- 脚本第一行需加:#/bin/bash(#/bin/sh),让系统查找正确的解释器,也可以不写,用默认的shell,养成良好的编程习惯,最好还是加上,指出用来解释这个脚本的程序。
- 给脚本添加可执行权限:chmod +x test.sh
- ./表示当前目录,整条命令的意思是执行当前目录下的 test.sh 脚本。如果不写./,Linux 会到系统路径(由 PATH
环境变量指定)下查找 test.sh,而系统路径下显然不存在这个脚本,所以会执行失败。
2、bash test.sh或 /bin/bash test.sh
- /bin/bash 以绝对路径执行
- 不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)
因为该方法是将test.sh作为参数传给sh(bash)命令来执行的。这时不是test.sh自己来执行,而是被人家调用执行,所以不要执行权限。
3、sh test.sh或 /bin/sh test.sh
- 使用方法同bash
- Linux 的 Shell 种类众多,在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again
Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash
二、在当前进程运行Shell脚本
上面3种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而以下方法则是在当前shell中执行的。
1、source test.sh
2、. test.sh
- 使用 source 命令不用给脚本增加执行权限;
- source命令通常用命令 . 来替代;
三、如何判断是不是在当前Shell进程中执行脚本?
1、test.sh内容如下:
#/bin/bash
echo ‘hello’
echo $$
2、借助$$变量来输出进程的 PID
使用source test.sh 、 . test.sh ,进程PID一致
使用./test.sh 、 bash test.sh 、 sh test.sh,进程PID不一致