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 7 并支持 HTTP
LEMP 是个缩写,代表一组软件包(L:Linux OS,E:Nginx 网络服务器,M:MySQL/MariaDB 数据库和 P:PHP 服务端动态编程语言),它被用来搭建动态的网络应用和网页 2016-09-09
-
linux环境配置nginx导致页面不刷新的解决方法
这篇文章介绍了linux环境配置nginx导致页面不刷新的解决方法,有需要的朋友可以参考一下 2013-09-09
-
Linux内核设备驱动地址映射笔记整理
今天小编就为大家分享一篇关于Linux内核设备驱动地址映射笔记整理,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 2018-12-12
-
网站加速VPS篇 memcache和memcached安装方法
Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。 2010-12-12
-
linux的最大打开文件数限制修改方法
这篇文章主要给大家介绍了关于linux最大打开文件数限制修改的方法,文中将实现的方法一步步介绍的非常详细,对同样遇到这个需求的朋友们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 2017-10-10
-
关闭selinux(防火墙)方法分享
默认装完CentOS,Selinux是打开的,这个你基本都是需要关闭,查看当前selinux的状态后,就可以按以下方法关闭selnux了 2014-03-03
-
Linux ssh服务器配置代码实例
这篇文章主要介绍了Linux ssh服务器配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 2020-09-09