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)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 文件系统的操作实现

    Linux 文件系统的操作实现

    这篇文章主要介绍了Linux 文件系统的操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • linux服务器下配置多tomcat实现实例

    linux服务器下配置多tomcat实现实例

    这篇文章主要介绍了linux服务器下配置多tomcat的相关资料,需要的朋友可以参考下
    2017-05-05
  • CentOS8.0 网络配置的实现

    CentOS8.0 网络配置的实现

    这篇文章主要介绍了CentOS8.0 网络配置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 详解Ubuntu下安装和配置Apache2

    详解Ubuntu下安装和配置Apache2

    本篇文章主要介绍了详解Ubuntu下安装和配置Apache2,小编觉得挺不错的,现在就分享给大家,也给大家做个参考。有兴趣的朋友可以了解一下。
    2016-12-12
  • Linux使用iptables限制多个IP访问你的服务器

    Linux使用iptables限制多个IP访问你的服务器

    iptables是一个管理netfilter的工具。这篇文章主要介绍了Linux使用iptables限制多个IP访问你的服务器的相关知识,需要的朋友可以参考下
    2018-10-10
  • Apache中Virtual Host虚拟主机配置及rewrite参数说明

    Apache中Virtual Host虚拟主机配置及rewrite参数说明

    这篇文章主要介绍了Apache中Virtual Host虚拟主机配置及rewrite模块中的重要参数说明,是在同一个Apache服务器软件上部署多个站点的基础方法,需要的朋友可以参考下
    2016-03-03
  • CentOS设置精准时间的方法

    CentOS设置精准时间的方法

    下面小编就为大家分享一篇CentOS设置精准时间的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • 基于Xshell使用密钥方式连接远程主机

    基于Xshell使用密钥方式连接远程主机

    这篇文章主要为大家详细介绍了基于Xshell使用密钥方式连接远程主机的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • linux系统实现重启网卡命令

    linux系统实现重启网卡命令

    本文介绍了三种在Linux系统中重启网卡的方法,包括使用服务命令、ifconfig命令以及ifdown/ifup命令,这些方法可以帮助系统管理员在维护或故障排除时快速恢复网络连接
    2025-10-10
  • CentOS下SSH无密码登录的配置文件

    CentOS下SSH无密码登录的配置文件

    这篇文章主要介绍了CentOS下SSH无密码登录的配置,包括配置SSH无密码登录需要三个步骤,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10

最新评论