仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 828|回复: 8
打印 上一主题 下一主题

[shell编程] 来一发shell剧本文件实行剖析

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:21:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!一.shell剧本父子历程剖析

代码:
  1. #!/bin/bashecho$$ps-ef|grep`echo$$`echo"-------------------------------------"(pwd;echo$$;ps-ef|grep`echo$$`;)echo"-------------------------------------"{pwd;echo$$;ps-ef|grep`echo$$`;}
复制代码

运转了局1




了局剖析1
1.最初一行显现以后登录shell历程ID为9561;
2.第三行显现登录shell派生出一个历程ID为10767的shell实行历程;该历程卖力扫描shell剧本举行实行;
3.10767剧本实行历程卖力逐行实行剧本:碰到内置下令间接在当10767历程中实行,碰到可实行步伐就fork新的子进历程来实行。
4.历程号为10768和10769的历程都是实行shell10767历程派生的子历程ps和grep.
5.10767剧本实行历程扫描到(com1;com2;)语句群时,会再派生一个ID10771shell卖力实行()内的下令和语句:10771逐行扫描()中的语句,依照步调3的划定规矩举行处置:历程号10773grep另有另外一个历程ps都是10771又派生出的子历程,ps子历程的父历程是10771此处没有显现出来。
6.10767剧本实行历程扫描到{com1;com2;}语句时,不会新派生子shell,间接利用以后历程10767举行卖力逐行实行剧本。



运转了局2





了局剖析2
其运转了局和运转1是一样的,bashcpro.sh和间接运转cpro.sh的事情机制是一样的,城市派生出一个实行shell,逐行读剧本举行实行;

总结:
Ø在以后shell中实行外部下令不会派生子shell,因而有些外部下令才干够改动以后的shell实行情况;
Ø在以后shell中实行内部下令或剧本时会派生子shell,以是这时候下令的实行不会影响以后shell情况;
Ø要想在以后shell中实行剧本,而不派生子shell,可使用.和source下令+剧本名举行实行
Ø./command.sh=bash./command.sh以后shell会派生子shell实行剧本文件,剧本的实行不会影响到以后shell情况
Ø../command.sh=source./command.sh间接在以后shell中实行剧本,剧本的实行回影响到以后shell情况

二.管道与shell剧本实行干系command|readvar和comand|whilereadvar
代码:
  1. pwd|readvarecho$var#1ls-l|whilereadvardoecho$var#2done
复制代码



了局剖析:
#1输入时空置
#2输入有值
这就是管道的秘籍,bash在实行pwd|readvar时管道双方的都是子shell实行,实行echo$var是父shell实行,父shell没法读到子shell变量
bash实行ls-l|whilereadvar右边是子shell右侧是父shell实行,故最初能够读到内容
shell剧本实行汇总:

1.内置下令(builtin)
shell注释步伐内建的,由shell间接实行,不必要派生新的历程;有一些外部下令能够用来改动以后的shell情况,如:
cd/path
var=value
readvar
exportvar
...

2.内部下令("externalcommand"or"diskcommand")
二进制可实行文件,必要由磁盘装进内存实行。会派生新的历程,shell注释步伐会挪用fork本身的一个拷贝,然后用exec系列函数来实行内部下令,然后内部下令就代替了先前fork的子shell

3.shell剧本(script)
shell注释步伐会fork+exec实行这个剧本下令,在exec挪用中内核会反省剧本的第一行(如:#!/bin/sh),找到用来实行剧本的注释步伐,然后装进这个注释步伐,由它注释实行剧本步伐。注释步伐大概有良多种,各类shell(Bourneshell,Kornshellcshell,rc及其变体ash,dash,bash,zshell,pdksh,tcsh,es...),awk,tcl/tk,expect,perl,python,等等。在此注释步伐明显是以后shell的子历程。假如这个注释步伐与以后利用的shell是统一种shell,好比都是bash,那末它就是以后shell的子shell,剧本中的下令都是在子shell情况中实行的,不会影响以后shell的情况。


三.怎样检察一个下令时内建下令仍是内部下令(步伐)
用户输出下令以后,shell一样平常fork,在子shell中实行下令。内建下令不是如许的。实行内建下令相称于挪用Shell历程中的一个函数,其实不创立新的历程。
怎样检察下令是不是为内建下令?


type下令

type-writeadescriptionofcommandtype


不加参数,会显现下令是内建下令仍是内部下令。

  1. $typeechoechoisashellbuiltin・-t参数,前往值file:暗示为内部指令,通常为内部可实行步伐,ELF格局alias:暗示该指令为下令别号所设定的称号;builtin:暗示该指令为bash内建的指令功效;$type-tlsalias$type-taliasbuiltin$type-tchmodfile・-a会将下令PATH路径显现出来。
复制代码


其他相干下令:

which下令只能找到path下可实行步伐,即内部步伐,内建下令没有举措辨认


file下令检察文件范例,file会实验读文件头,剖析文件范例


欢迎大家来到仓酷云论坛!
莫相离 该用户已被删除
沙发
发表于 2015-1-16 09:16:38 | 只看该作者

来一发shell剧本文件实行剖析

让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
小妖女 该用户已被删除
板凳
发表于 2015-1-25 18:58:17 | 只看该作者
写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。
变相怪杰 该用户已被删除
地板
发表于 2015-2-3 23:38:39 | 只看该作者
掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
再见西城 该用户已被删除
5#
发表于 2015-2-9 11:00:24 | 只看该作者
应对Linux的发展历史和特点有所了解,Linux是抢占式多任务多用户操作系统,Linux最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具。
分手快乐 该用户已被删除
6#
发表于 2015-2-27 09:46:47 | 只看该作者
首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。
只想知道 该用户已被删除
7#
发表于 2015-3-9 10:19:36 | 只看该作者
当然你不需搭建所有服务,可以慢慢来。自己多动手,不要非等着别人帮你解决问题。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-17 02:10:04 | 只看该作者
一定要学好命令,shell是命令语言,命令解释程序及程序设计语言的统称,shell也负责用户和操作系统之间的沟通。
第二个灵魂 该用户已被删除
9#
发表于 2015-3-23 18:10:56 | 只看该作者
再次,Linux是用C语言编写的,我们有学习C语言的基础,读程序和编写代码方面存在的困难小一点,也是我们能较快掌握的原因之一。?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 17:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表