仓酷云

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

[其他Linux] Linux教程之面向对象的Shell剧本仓酷云

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:30:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

本版积分规则

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

GMT+8, 2024-4-20 03:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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