Shell脚本的执行方法一般有如下三种:
(1)bashscript-name或则shscript-name;(2)path/script-name或则./script-name;(3)sourcescript-name或则.script-name。下边,分别介绍下这三种形式的特征:
(1)bashscript-name或则shscript-name
这是当脚本文件本身没有可执行权限(即文件权限属性x位为-号)经常使用的技巧,或则脚本文件开头没有指定类库时须要使用的技巧。推荐使用这些技巧。
(2)path/script-name或则./script-name
指在当前路径下执行脚本(脚本须要有执行权限),须要将脚本文件的权限改为可执行(即文件权限属性为x位)。具体方式为:chmoda+xscript-name。之后通过执行脚本绝对路径或则相对路径就可以执行脚本了。
注意:在生产环境中linux 执行shell脚本,运维人员因为忘掉为该脚本设置可执行权限,之后直接使用,造成出错。为此,推荐第一种bashscript-name。
(3)sourcescript-name或则.script-name
source或则“.”命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或“.”加载并执行的相关脚本文件的命令及句子,而不是形成一个子Shell来执行文件中的命令。
注意:这是和其他几种执行shell方法的最大不同。
举个板栗:
新建一个文件test_sh.shlinux系统日志,不给它赋于任何可执行的权限x。
编辑内容如下:
文件以及文件中内容与常见的shell不同之处在于linux系统界面,这儿的文件没有赋于可执行权限以及在文件内容中的首行中没有添加#!/bin/bash。我们如今用上述介绍的几种方法来测试下疗效。
第二种方法./script-name,执行疗效如下:
报权限拒绝,Permissiondenied,此时,我们只要修改文件的属性为可执行即可。
执行第一种bashscript-name,疗效如下:
可以成功执行,输出:hello。并且,我们输入命令:echo$name,发觉如下:
name的值是空的。不难理解,bashscript-name是形成了一个子进程shell,而我们当前的操作还在父shell中因而得不到该变量值。
执行第三种方式.test_sh.sh,疗效如下:
可以成功的输出变量的值。这是由于sourcescript-name和.script-name是将script-name中的内容直接加载到当前的shell,因而才能输出当前变量的值。
刚刚第二种形式我们执行失败,如今我们通过chmoda+xscript-name,之后再度执行上述命令,查看疗效:
注意:该种方法也是形成了一个子进程Shell,因而echo$name一直找不到该变量。
补充知识点:
一个规范的Shell脚本在第一行会强调由那个程序(原语)来执行脚本中的内容,这一行内容在Linuxbash的编程通常为:
#!/bin/bash
或
#!/bin/sh
注意:
(1)在Shell中若果一行的第一个字母是#,则是注释,并且里面两个是写在第一行,所以不是脚本注释行,假如写在某个命令以后linux 执行shell脚本,则弄成注释行。
(2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。