bash shell 脚本的方法有多种, 现在作个小结. 假设我们编写好的 shell 脚本的文件名为 hello.sh, 文件位置在 / data/shell 目录中并已有执行权限.
方法一: 切换到 shell 脚本所在的目录 (此时, 称为工作目录) 执行 shell 脚本:
- cd /data/shell
- ./hello.sh
./ 的意思是说在当前的工作目录下执行 hello.sh. 如果不加上./,bash 可能会响应找到不到 hello.sh 的错误信息. 因为目前的工作目录 (/data/shell) 可能不在执行程序默认的搜索路径之列, 也就是说, 不在环境变量 PASH 的内容之中. 查看 PATH 的内容可用 echo $PASH 命令. 现在的 / data/shell 就不在环境变量 PASH 中的, 所以必须加上./ 才可执行.
方法二: 以绝对路径的方式去执行 bash shell 脚本:
/data/shell/hello.sh
方法三: 直接使用 bash 或 sh 来执行 bash shell 脚本:
- cd /data/shell
- bash hello.sh
注意, 若是以方法三的方式来执行, 那么, 可以不必事先设定 shell 的执行权限, 甚至都不用写 shell 文件中的第一行 (指定 bash 路径). 因为方法三是将 hello.sh 作为参数传给 sh(bash) 命令来执行的. 这时不是 hello.sh 自己来执行, 而是被人家调用执行, 所以不要执行权限. 那么不用指定 bash 路径自然也好理解了啊
方法四: 在当前的 shell 环境中执行 bash shell 脚本:
- cd /data/shell
- . hello.sh
或
- cd /data/shell
- source hello.sh
前三种方法执行 shell 脚本时都是在当前 shell(称为父 shell)开启一个子 shell 环境, 此 shell 脚本就在这个子 shell 环境中执行. shell 脚本执行完后子 shell 环境随即关闭, 然后又回到父 shell 中. 而方法四则是在当前 shell 中执行的.
来源: http://www.bubuko.com/infodetail-2912567.html