Linux中执⾏Shell脚本的⽅式(三种⽅法)
Shell 脚本的执⾏⽅式通常有如下三种:
(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位为-号)时常使⽤的⽅法,或者脚本⽂件开头没有指定解释器时需要使⽤的⽅法。推荐使⽤这种⽅法。
(2)path/script-name或者./script-name
指在当前路径下执⾏脚本(脚本需要有执⾏权限),需要将脚本⽂件的权限改为可执⾏(即⽂件权限属性为x位)。具体⽅法为:chmod
a+x script-name。然后通过执⾏脚本绝对路径或者相对路径就可以执⾏脚本了。
注意:在⽣产环境中,运维⼈员由于忘记为该脚本设置可执⾏权限,然后直接使⽤,导致出错。因此,推荐第⼀种 bashscript-name。
(3)source script-name或者. script-name
source或者“.”命令的功能是:读⼊脚本并执⾏脚本,即在当前Shell中执⾏source或“.”加载并执⾏的相关脚本⽂件的命令及语句,⽽不是产⽣⼀个⼦Shell来执⾏⽂件中的命令。
注意:这是和其他⼏种执⾏shell⽅式的最⼤不同。
举个栗⼦:
新建⼀个⽂件test_sh.sh,不给它赋予任何可执⾏的权限x。
编辑内容如下:
⽂件以及⽂件中内容与常见的shell不同之处在于,这⾥的⽂件没有赋予可执⾏权限以及在⽂件内容中的⾸⾏中没有添加#!/bin/bash。我们现在⽤上述介绍的⼏种⽅式来测试下效果。
第⼆种⽅式 ./script-name,执⾏效果如下:
报权限拒绝,Permission denied,此时,我们只要更改⽂件的属性为可执⾏即可。
执⾏第⼀种bash script-name,效果如下:
可以成功执⾏,输出:hello。但是,我们输⼊命令:echo $name,发现如下:
name的值是空的。不难理解,bash script-name是产⽣了⼀个⼦进程shell,⽽我们当前的操作还在⽗shel中因此得不到该变量值。
执⾏第三种⽅法. test_sh.sh,效果如下:
可以成功的输出变量的值。这是因为source script-name和. script-name是将script-name中的内容直接加载到当前的shell,因此能够输出当前变量的值。
刚才第⼆种⽅式我们执⾏失败,现在我们通过chmod a+x script-name,然后再次执⾏上述命令,查看效果:
注意:该种⽅式也是产⽣了⼀个⼦进程Shell,因此echo $name仍然不到该变量。
补充知识点:
⼀个规范的Shell脚本在第⼀⾏会指出由哪个程序(解释器)来执⾏脚本中的内容,这⼀⾏内容在Linux bash的编程⼀般为:
#!/bin/bash
或
linux循环执行命令脚本#!/bin/sh
注意:
(1)在Shell中如果⼀⾏的第⼀个字母是#,则是注释,但是上⾯两个是写在第⼀⾏,所以不是脚本注释⾏,如果写在某个命令之后,则变成注释⾏。
(2)sh为bash的软链接,⼤多数情况下,脚本的开头使⽤“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使⽤“#!/bin/bash”。
</div>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论