当我们编写好脚本文件以后,接下来就是执行脚本文件了。执行脚本文件的方式有很多种,比如一个文件a.sh,我们可以选择需要执行权限的方式(chmod +x a.sh),不需要执行权限的方式(bash a.sh或者sh a.sh),需要开启子进程的方式,不需要开启进程的方式。

可执行权限方式

通过chmod 命令可以给脚本文件分配执行权限,脚本文件一旦有了执行权限,就可以使用绝对路径或相对路径执行了。下面来看看效果:

empty.sh

#!/bin/bashif [ $# -eq 0 ];thenecho "用法:$0 文件名..."exit 1
fi#测试位置变量个数,个数为0时循环结束while (($#))
doif [ ! -s $1 ];thenecho -e "为空文件,正在删除该文."rm -rf $1else[ -f $1 ] && echo -e "为非空文件."[ -d $1 ] && echo -e "为目录,不是文件名."fishift
done

本脚本是检测多个文件是否为空,读取位置参数,测试是否空文件删除空文件。可以看到chmod +x empty.sh分配可执行权限,然后使用相对路径执行。也可以使用绝对路径。

./的命令用法

从上面的信息来看,chmod +x empty.sh分配可执行权限后,可以使用./empty.sh执行,那./有什么作用呢?

其实就是打开一个子shell来读取并执行empty中命令。 运行一个shell脚本时会启动另一个命令解释器。每个shell脚本有效地运行在父shell(parentshell)的一个子进程里.

没有可执行权限方式

如果暂时还没有给脚本文件可执行文件权限,那么默认脚本是无法直接执行的,但bash或sh解释器,可以将脚本文件作为参数来执行文本。


通过以上3条命令的输出信息,可以看到,在没有执行权限的情况下,执行./empty.sh文件会出现权限不够,而使用bash、sh执行脚本文件,就能正确输出结果!

开启子进程的方式

关于是否开启子进程方式,一般通过pstree命令来查看进程树。

通过上面的输出,我们可以看到计算机启动进程是systemd,然后在这个进程下启动了N个子进程。


在子进程sshd下有2个sshd的子进程,在2个sshd子进程下开启了bash解释器子进程,而且在其中一个bash进程下面还执行了一条pstree命令。

对于前面我们说的不管是直接执行,还是使用bash、sh解释器执行脚本,都是开启子进程的,下面通过一个脚本演示效果。

sleep.sh

#!/bin/bashsleep 1000


然后开启一个命令终端,用pstree命令观察进程树

可以看到,在bash终端下开启了一个子进程脚本文本,通过脚本文件执行了一条sleep命令

下面,使用bash命令再次执行该脚本。还是在打开一个终端pstree命令观察

结果类似,在bash进程下开启了一个bash子进程,在bash子进程下执行了一条sleep命令。

不需要开启进程的方式

下面 我们来看看不开启子进程的执行方式的案例,首先,打开一个终端,但是这次我们使用source或者.(点)命令来执行脚本文件。

再打开第二个终端,通过pstree命令观察结果。

可以看到,脚本文件中的sleep命令是直接在bash终端下执行的。在写一个脚本,分别使用开启和不开启进程的方式执行。


bash命令开启子进程的方式执行脚本却不受任何影响。下面,不开启进程的方式执行。

source命令不开启子进程执行脚本文件会导致整个终端被关闭。

总结

1、bash与sh在对于脚本执行来说,效果一致,不继承除了当前shell之外的变量值。在无空格“.”(相对路径)、绝对路径且有执行权限的脚本执行中,效果与bash及sh一致。
2、source及带空格的“.”执行效果一致,且会继承其他shell的变量。
3、除了不带空格的“.”之外,其他脚本的执行都不需要给脚本增加执行权限。
4、bash、sh、不带空格的点(相对路径)或绝对路径中,脚本是在子进程中执行的。在source及带空格的点中,脚本是在父进程中执行的,差别很大。
5、关于是否开启子进程,一般通过pstree命令来查看。


欢迎关注公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

Linux shell脚本文件的各种执行方式相关推荐

  1. linux脚本定时拷贝文件,使用Linux shell脚本实现FTP定时执行批量下载指定文件

    使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示: 1.目标FTP服务器地址 #FTP服务器地址 ip=10.19.15.23 2.FTP账号和密码 u=账号 p=密码 3.使用m ...

  2. linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项

    原标题:Linux shell脚本使用while循环执行ssh的注意事项 如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了. 一.场景还原 ...

  3. Linux shell脚本的建立与执行

      在进行linux测试时编写脚本是必不可少的.最近经常使用Linux,感觉太频繁地敲击键盘有些累了,于是想到了Shell脚本.可以把太多的命令写成一个脚本,这样每次执行一遍  shell文件,就可以 ...

  4. Linux下shell脚本的4中执行方式

    转自http://www.jb51.net/article/53924.htm bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置 ...

  5. linux 脚本含参,linux shell脚本文件的入参

    几个特殊变量: $0 : 指本脚本文件的文件名 $1及以后: 脚本文件的入参 $# : 入参个数 $* : 所有入参,将所有变量当作单个单词保存,基本上,将所有参数当作一个参数,而不是多个对象.如./ ...

  6. Linux shell 脚本文件@echo Off 关闭命令回显

    window的bat脚本用@echo off 就能关闭echo命令的输入显示,这样在echo后,提示的文字就不会那么难看 最近在写shell脚本,发现linux下的echo无法这样来处理 找了好久才找 ...

  7. shell脚本的两种执行方式区别举例

    1. sh及bash方式执行: 第一个字母l:看来sh只是bash的一个链接. 要了解区别,先建立一个实验脚本如下: echo 'udir=`pwd`' >testsource.sh #符号为单 ...

  8. linux shell 读取文件的三种方式

    假设存在文件user.csv 重定向标准输入,方式一: [root@wpuj3zui5est1ifj-0002 ~]# cat -n back.sh 1 #!/bin/bash2 #测试备份文件时候的 ...

  9. linux执行加密的shell,Linux下Shell脚本文件的加密

    一些站长会对自己编写的网页文件进行加密,以免自己辛辛苦苦写出来的成果被盗用.而Linux程序员编写的Shell脚本文件,也是可以加密的.这样做的好处除了防止被盗用,还可以防止自己脚本文件中的密码泄露, ...

  10. linux shell脚本的执行方式与区别

    linux shell脚本的执行方式与区别

最新文章

  1. SpringMVC的数据转换、格式化和数据校验
  2. php 5.6 mcrypt,php 5.6.36 安装mcrypt
  3. 强烈推荐深入浅出jBPM
  4. CSS3属性——(二)
  5. Noodle.ai的Atlas机器学习(ML)框架第1部分:构建AI应用程序面临的挑战
  6. vue3移动端腾讯地图坐标拾取,获取当前定位(腾讯、高德、百度、天地图),火星坐标GCJ-02–>百度坐标BD-09,根据坐标经纬度计算两点距离的方法,点击链接打开地图导航的方法
  7. java网吧计费系统源码_网吧计费管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
  8. OpenGL纹理贴图
  9. photoshop 快捷键_PhotoShop快捷键一览
  10. X-Order创始人陶荣祺:Libra让所有互联网应用成为开放金融的一部分
  11. java web pring log4j_springmvc之log4j
  12. iOSUILable边距设置
  13. CocosCreator知识库amp;amp;lt;二amp;amp;gt;关于TiledMap的系统学习教程(阶段性更新)
  14. 【翻译】听觉刺激增强深度睡眠,实现“熟睡自由”
  15. php连接mysql指定表名_php mysql获取指定数据库所有表名_PHP教程
  16. python 面试题 博客园_常见的python面试问题1
  17. 2022南京大学软件学院考研初试400分上岸经验贴
  18. Python简易图片文字识别
  19. 关于充分必要条件的充分性和必要性
  20. 一款好用的时间控件(时间选择器)-jeDate

热门文章

  1. 实现一个在线抽奖系统,就算是个小白看了也能做出来(附源码)
  2. C#_HelloWorld 篇
  3. 史上最全软件测试Web测试要点,吐血整理。
  4. php解析m3u8代码,m3u8后缀 视频解析接口源码
  5. Python 库学习 —— Excel存储(xlwt、xlrd)
  6. cmd命令查询电脑序列号_WINDOWS 用命令行 找到PC序列号以及计算机名称
  7. android 仿饿了么地图,微信小程序仿饿了么地址定位、筛选与回传
  8. 利用VBA将出纳表格生成可打印的凭证
  9. 微信最新的系统默认emoji表情集
  10. 软件测试技术(思维导图)