Linux中执行Shell脚本的三种实现方式
Linux中执行Shell脚本的三种实现方式 更新时间:2023年11月24日 16:52:24 作者:timchen525 这篇文章主要介绍了Linux中执行Shell脚本的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教 目录 Shell 脚本的执行方式通常有 (1)bash script-name或者sh script-name (2)path/script-name或者./script-name (3)source script-name或者. script-name 举个栗子 补充知识点 总结 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 或 #!/bin/sh 注意: (1)在Shell中如果一行的第一个字母是#,则是注释,但是上面两个是写在第一行,所以不是脚本注释行,如果写在某个命令之后,则变成注释行。 (2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。 总结 以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 您可能感兴趣的文章: Linux中shell脚本的jq命令用法详解 Linux Shell脚本中如何获取命令运行的结果 Linux中Shell脚本判断文件/文件夹是否存在方法 Linux Shell脚本语句执行失败,后续语句继续执行的问题及解决 Linux终端执行shell脚本,提示权限不够的问题及解决 Linux 执行 Shell 脚本 相关文章 Ubuntu18.04更换国内源的方法示例 这篇文章主要介绍了Ubuntu18.04更换国内源的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2019-12-12 Apache和Tomcat有什么区别_动力节点Java学院整理 Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别。下面通过本文给大家介绍Apache和Tomcat的区别,感兴趣的朋友一起看看吧 2017-08-08 Linux用户与最小权限原则解析 这篇文章主要为大家解析了Linux用户与最小权限原则,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-04-04 在 Ubuntu 16.04 为 Nginx 服务器安装 LEMP 环境(MariaDB,PHP...