Shell脚本执行的三种方式 您所在的位置:网站首页 shell脚本执行可执行文件的方法有哪些 Shell脚本执行的三种方式

Shell脚本执行的三种方式

2024-02-26 23:05| 来源: 网络整理| 查看: 265

参考:https://blog.csdn.net/timchen525/article/details/76407735

bash script-name 或 sh script-namepath/script-name 或 ./script-namesource script-name 或 . script-name

(1)bash script-name 或 sh script-name 这是当脚本文件本身没有可执行权限(即文件权限属性x位为-号)时常使用的方法(不管脚本有无可执行权限都可以通过这种方式运行),或者脚本文件开头没有指定解释器时需要使用的方法(这种脚本运行方式的bash或sh意思就是给脚本指定了命令解释程序,而脚本中第一行的#!/bin/bash或#!/bin/sh与此作用相同)。推荐使用这种方法。

(2)path/script-name 或 ./script-name 执行条件有二:脚本文件被赋予了执行权限;脚本文件第一行指定了命令解释程序(一般为#!/bin/bash) 注意:在生产环境中,运维人员由于忘记为该脚本设置可执行权限,然后直接使用,导致出错。因此,推荐第一种 bashscript-name。

(3)source script-name 或 . script-name source或者 “.” 命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或 “.” 加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令。 注意:这是和其他集中执行shell方式的最大不同。

举个栗子: 新建一个文件test.sh,不给它赋予任何执行权限 在这里插入图片描述 test.sh 内容如下

name="Louzen" echo "set name to Louzen"

这个脚本文件与常见的shell不同之处在于,这里的文件没有赋予可执行权限以及在文件内容中的首行中没有添加#!/bin/bash。 我们现在用上述介绍的几种方式来测试下效果。

第一种:bash test.sh

可以执行脚本内容,但是脚本中设置的name变量却输出为空 在这里插入图片描述 name值是空的,是因为bash script-name 是产生了一个子进程shell,而我们当前的操作还在父进程shell中,因此得不到name变量。

第二种:./test.sh

不能执行脚本内容,赋予权限后可以执行,但是name变量还是输出为空 在这里插入图片描述 name为空,原因与第一种相同

第三种:source test.sh

test.sh 没有执行权限的情况下可以执行,并且成功输出name的值 在这里插入图片描述 可以成功的输出变量的值。这是因为source script-name和. script-name是将script-name中的内容直接加载到当前的shell,因此能够输出当前变量的值。

补充知识点: 一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为: #!/bin/bash 或 #!/bin/sh

注意: (1)在Shell中如果一行如果以 “#!” 开头,就是在指明命令解释程序(解释器),如果第一行仅以 “#” 开头,就是一个普通的注释,除第一行之外的其他行,只要第一个字符是 “#” 那就都是注释。 (2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。二者的区别是有没有开启posix模式,具体参考:https://blog.csdn.net/wangxin6722513/article/details/44922695



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有