仓酷云

标题: Linux教程之面向对象的Shell剧本仓酷云 [打印本页]

作者: 第二个灵魂    时间: 2015-1-18 11:30
标题: Linux教程之面向对象的Shell剧本仓酷云
由于在linux中,用户权限很大,做任何事情都很自由,所以,你往往需要知道你做的每一步在干什么。
还记得之前谁人用算素数的正则表达式吗?编程这个天下太风趣了,老是能看到一些即别开生面的工具。你有无想过在写Shell剧本的时分能够把你的变量和函数放到一个类中?不要觉得这不成能,这不,我在网上又看到了一个把Shell剧本整成面向对象的工具。Shell原本是不撑持的,必要本人做点工具,能弄出这个事事的人真的是hacker啊。
固然,这里并非真实的面向对象,由于其只是封装而已,还没有撑持承继和多态。最反常的是他竟然还撑持typeid,靠!
上面让我们看看他是怎样来做的。上面的剧本大概会有点隐晦。本想注释一下,厥后想一想,仍是人人本人专研一下吧,实在看懂也不难,给人人提几个点吧。
剧本以下所示: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,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。
作者: 蒙在股里    时间: 2015-1-21 08:49
说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。?
作者: 若相依    时间: 2015-2-5 15:16
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
作者: 兰色精灵    时间: 2015-2-12 11:06
任何人都可以根据自己的喜好来定制适合自己的操作系统,Linux?是抢占式多任务多用户操作系统.
作者: 小妖女    时间: 2015-2-21 13:38
下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题。
作者: 冷月葬花魂    时间: 2015-2-28 01:07
选择交流平台,如QQ群,网站论坛等。
作者: 飘灵儿    时间: 2015-3-3 11:27
对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。
作者: 灵魂腐蚀    时间: 2015-3-7 01:34
掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
作者: 乐观    时间: 2015-3-14 00:25
众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。
作者: 爱飞    时间: 2015-3-16 20:11
硬盘安装及光盘安装,清楚了解安装Linux应注意的有关问题,如安装Linux应在最后一个分区内,至少分二个分区。
作者: 简单生活    时间: 2015-3-23 00:07
未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。
作者: 莫相离    时间: 2015-3-25 17:12
现在的linux操作系统如redhat,难点,红旗等,都是用这么一个内核,加上其它的用程序(包括X)构成的。
作者: 愤怒的大鸟    时间: 2015-3-27 08:40
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。
作者: 山那边是海    时间: 2015-3-30 17:11
不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。
作者: 不帅    时间: 2015-4-4 16:38
不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。
作者: 仓酷云    时间: 2015-4-8 20:39
上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.
作者: 老尸    时间: 2015-4-10 05:42
直到学习Linux这门课以后,我才知道,原来我错了。?
作者: 再见西城    时间: 2015-4-14 04:27
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
作者: 柔情似水    时间: 2015-4-16 06:26
说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。?
作者: 小女巫    时间: 2015-4-19 00:55
要增加自己Linux的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个Linux发行版本,然后进入精彩的Linux世界,相信对于你自己的Linux能力必然大有斩获。




欢迎光临 仓酷云 (http://www.ckuyun.com/) Powered by Discuz! X3.2