Linux shell编程(二)shell脚本执行的三种方式

在脚本执行前,会先执行环境变量ENV,


一个规范的Shell脚本在第1行(一定要是在第一行,在其它行就变成了释行)会指出由哪个程序(解释器)来执行脚本中的内容:
#!/bin/env python
#!/bin/perl
#!/bin/sh
#!/bin/bash
等等,运行时,指定解释器,如:python test.py
在Linux bash的编程一般为:
#!/bin/bash 或  #!/bin/sh


注意:
(1)在Shell中如果一行的第一个字母是#,则是注释,但是上面两个是写在第一行,所以不是脚本注释行,如果写在某个命令之后,则变成注释行,#!称为“幻数”。
(2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。

Linux bash三种执行方式:
(1)bash script-name 或者 sh script-name;
(2)path/script-name或者./script-name;
(3)sourcescript-name或者. script-name。 此处的“.”后面是有空格的

下面,分别介绍下这三种方式的特点:
(1)bash script-name或者sh script-name
这是当脚本文件本身没有可执行权限(即文件权限属性x位为-号)时常使用的方法,或者脚本文件开头没有指定解释器时需要使用的方法。推荐使用这种方法。

创建一个test.sh脚本:
cat >test.sh
#!/bin/bash
for args in $@
do
   echo $args
done

创建的test.sh脚本没有x执行权限,这时用第2、3种方法是不能执行的,只能用第1种方式



(2)path/script-name或者./script-name
我们如果给这个脚本增加执行权限,这三种方法都可以执行

指在当前路径下执行脚本(脚本需要有执行权限),需要将脚本文件的权限改为可执行(即文件权限属性为x位)。具体方法为:chmod a+x script-name。然后通过执行脚本绝对路径或者相对路径就可以执行脚本了。
注意:在生产环境中,运维人员由于忘记为该脚本设置可执行权限,然后直接使用,导致出错。因此,推荐第一种 bash script-name。

(3)source script-name或者. script-name
   source或者“. ”命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或“.”加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令。
   这种方式与前二种最大的不同是,它是在当前父进程shell中直接运行脚本,所以在当前的shell中可以直接引用脚本内的参数或变量,函数等。而第1,2种执行方式是产生一个子进程shell运行脚本,和父进程shell无关,所以当前父进程shell,不能引用脚本中的值,如下图运行的结果显示:

如果用第1,2种方式执行,就不能引用脚本内的变量,参数。它是由子进程shell执行的。



注意:这是和其他几种执行shell方式的最大不同。


猜你喜欢

转载自blog.csdn.net/openbox2008/article/details/80533520