shell脚本执行

shell脚本执行

对于我们这些小白而讲,shell脚本无疑是最令人头疼的事了,我再这里讲一下shell脚本运行要注意的哪些。

shell脚本就好像c++,java代码一样,按照从上到下然后从左到右的顺序执行。就像我们日常读书一样。如果shell命令遇见了子进程(嵌套代码),程序就会跟着顺序进入子进程。当子进程完成后,回到父进程,并且把父进程所需要的参数提交。

shell执行的方式

shell一共有4种执行方式

(1)bash file 或者 sh file 当脚本写好以后,文件创建时默认是没有执行的,运行脚本需要执行权限,所以直接运行就不行。要想执行就需要用这种方法。 示例:

shell脚本执行

当脚本开头没有解释器的时候,这就可以用这种方法来执行。

(2)绝对路径或者./ file 执行文件再当前目录下执行,可以直接用./ file去执行这个文件。其中 . 代表的是父目录,在这表现为相对路径。如果执行文件不再该目录下,那就使用绝对路径。在这种方法执行文件的时候用户必须附有该执行权限。

chmod +x file

这条命令可以给用户加上执行权限。然后文件内容头要有解释器。

shell脚本执行

shell脚本执行

(3)可以用管道或者重定向的方法

sh<file 或者 file|sh

这种方法虽然感觉跟第一种方法一样,但是好多时候可以用这种方法做到精简代码。

(4)source file 或者 . file ,如果脚本里面有嵌套,那么就会生成一个子进程。shell脚本中的各个代码按顺序执行,再执行时会创建一个进程。当语句中嵌套其他的有其他脚本,那么这些语句默认情况下会开启一个子进程。而用这两个命令不会打开子进程,它会直接在这个父进程中运行。所以这两个命令可以将其嵌套程序的变量,返回值直接传递到父进程中使用。要注意的是. 后面一定要有空格。

pstree -p 查看进程

为了方便我们查看进程,我们在子脚本中设置休眠时间

sleep 设置休眠时间

shell脚本执行

用./3.log命令运行后车看子进程 

shell脚本执行

用source 3.log运行的结果

shell脚本执行

其中4.log是3.log的嵌套函数,由结果图可以看出,该命令没有开启子进程

原创文章,作者:phosphor,如若转载,请注明出处:http://www.178linux.com/77563

(2)
phosphorphosphor
上一篇 2017-06-05 19:36
下一篇 2017-06-05 22:47

相关推荐

  • 网卡别名及多网卡配置

    网卡别名 对于要在不同网段环境中使用的设备有很大的帮助。     要使用网卡别名首先要关闭NetworkManager这个服务,防止在后续操作中引起不必要的冲突。 [root@laodeng6 ~]# chkconfig NetworkManager off [root@laod…

    Linux干货 2016-09-06
  • 文本处理工具

    1.cat 主要三大功能: 1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename << EOF ….>EOF (只能创建新文件,不能编辑已有文件);cat向已经存在的文件追加内容:cat >> file <<EOF…>EOF 3.将几…

    2017-07-29
  • 课后习题3–正则表达式

    1、查出分区空间使用率的最大百分比值 [root@centos7 ~]# df | grep "^/dev" | grep -v "cdrom$" | tr ' '&nb…

    Linux干货 2016-08-07
  • centos7源码编译安装Apache2.4.25服务

    •一、源码包下载 •二、安装开发环境以及编译环境 •三、编译安装以及报错排查 •四、调试Apache服务 前言: 本文主要介绍了在Centos7环境中如何通过源码编译的方式安装Apache服务(也就是我们的httpd服务)由于本文整理时间有限,所以难免有些纰漏之处,欢迎大家在阅读后在评论区指出,本人看到会在第一时间修改文中错误的地方。 为什么要进行源码编译安…

    2017-04-22
  • OpenSSL 的使用

    OpenSSL 是一个开源项目,其组成主要包括一下三个组件:     openssl:多用途的命令行工具     libcrypto:加密算法库     libssl:加密模块应用库,实现了ssl及tls openssl可以实现:秘钥证书管…

    Linux干货 2017-06-07
  • 阿里云修改hostname主机名的一点小技巧

    CentOS 7以后修改主机名一般使用: hostnamectl set-hostname newhostname 如果仍然无效,使用vim打开/etc/cloud/cloud.cfg,将 preserve_hostname=fale 改为 preserve_hostname=true 即可。 以上在阿里云ECS上亲测有效,使用了网上查阅…

    Linux干货 2017-01-09