Linux教程之面向对象的Shell剧本仓酷云
由于在linux中,用户权限很大,做任何事情都很自由,所以,你往往需要知道你做的每一步在干什么。还记得之前谁人用算素数的正则表达式吗?编程这个天下太风趣了,老是能看到一些即别开生面的工具。你有无想过在写Shell剧本的时分能够把你的变量和函数放到一个类中?不要觉得这不成能,这不,我在网上又看到了一个把Shell剧本整成面向对象的工具。Shell原本是不撑持的,必要本人做点工具,能弄出这个事事的人真的是hacker啊。
固然,这里并非真实的面向对象,由于其只是封装而已,还没有撑持承继和多态。最反常的是他竟然还撑持typeid,靠!
上面让我们看看他是怎样来做的。上面的剧本大概会有点隐晦。本想注释一下,厥后想一想,仍是人人本人专研一下吧,实在看懂也不难,给人人提几个点吧。
[*]我们能够看到,上面的这个剧本界说了class,func,var,new等函数,实在这些就是所谓的关头字。
[*]class是一个函数,次要是纪录类名。
[*]func和var实践上是把成员函数名和成员变量记成有不异前缀的各类变量。
[*]new办法次要是纪录实例。人人重点看看new函数里的谁人for轮回,最中心的就在那边了。
剧本以下所示:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475#!/bin/bash#-------------------------------------------------------------------#OOsupportfunctions#KludgedbyPimvanRiezen<pi@madscience.nl>#-------------------------------------------------------------------DEFCLASS=""CLASS=""THIS=0class(){DEFCLASS="$1"evalCLASS_${DEFCLASS}_VARS=""evalCLASS_${DEFCLASS}_FUNCTIONS=""}static(){return0}func(){localvarname="CLASS_${DEFCLASS}_FUNCTIONS"eval"$varname="${$varname}$1""}var(){localvarname="CLASS_${DEFCLASS}_VARS"eval$varname=""${$varname}$1""}loadvar(){eval"varlist="$CLASS_${CLASS}_VARS""forvarin$varlist;doeval"$var="$INSTANCE_${THIS}_$var""done}loadfunc(){eval"funclist="$CLASS_${CLASS}_FUNCTIONS""forfuncin$funclist;doeval"${func}(){${CLASS}::${func}"$*";return$?;}"done}savevar(){eval"varlist="$CLASS_${CLASS}_VARS""forvarin$varlist;doeval"INSTANCE_${THIS}_$var="$$var""done}typeof(){evalecho$TYPEOF_$1}new(){locallocalcvar="$2"shiftshiftlocalid=$(uuidgen|trA-Fa-f|sed-e"s/-//g")evalTYPEOF_${id}=$classeval$cvar=$idlocalfunclisteval"funclist="$CLASS_${class}_FUNCTIONS""forfuncin$funclist;doeval"${cvar}.${func}(){localt=$THIS;THIS=$id;localc=$CLASS;CLASS=$class;loadvar;loadfunc;${class}::${func}"$*";rt=$?;savevar;CLASS=$c;THIS=$t;return$rt;}"doneeval"${cvar}.${class}"$*"||true"}上面,让我们来看看例程吧。
123456789101112131415161718192021222324252627282930313233343536373839404142#-------------------------------------------------------------------#Examplecode#-------------------------------------------------------------------#classdefinitionclassStorpelfuncStorpelfuncsetNamefuncsetQualityfuncprintvarnamevarquality#classimplementationStorpel::Storpel(){setName"$1"setQuality"$2"if[-z"$name"];thensetName"Generic";fiif[-z"$quality"];thensetQuality"Normal";fi}Storpel::setName(){name="$1";}Storpel::setQuality(){quality="$1";}Storpel::print(){echo"$name($quality)";}#usagenewStorpelone"Storpilator1000"MediumnewStorpeltwonewStorpelthreetwo.setName"Storpilator2000"two.setQuality"Strong"one.printtwo.printthree.printecho""echo"one:$one($(typeof$one))"echo"two:$two($(typeof$two))"echo"three:$three($(typeof$two))"
(全文完)
学习python,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。 说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。? Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。 任何人都可以根据自己的喜好来定制适合自己的操作系统,Linux?是抢占式多任务多用户操作系统. 下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题。 选择交流平台,如QQ群,网站论坛等。 对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。 掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。 众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。 硬盘安装及光盘安装,清楚了解安装Linux应注意的有关问题,如安装Linux应在最后一个分区内,至少分二个分区。 未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。 现在的linux操作系统如redhat,难点,红旗等,都是用这么一个内核,加上其它的用程序(包括X)构成的。 甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。 不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。 不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。 上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题. 直到学习Linux这门课以后,我才知道,原来我错了。? Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。 说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。? 要增加自己Linux的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个Linux发行版本,然后进入精彩的Linux世界,相信对于你自己的Linux能力必然大有斩获。
页:
[1]