面向对象的Shell脚本
来源:互联网 发布:大妈投资域名300万被骗 编辑:程序博客网 时间:2024/06/05 18:30
还记得以前那个用算素数的正则表达式吗?编程这个世界太有趣了,总是能看到一些即别出心裁的东西。你有没有想过在写Shell脚本的时候可以把你的变量和函数放到一个类中?不要以为这不可能,这不,我在网上又看到了一个把Shell脚本整成面向对象的东西。Shell本来是不支持的,需要自己做点东西,能搞出这个事事的人真的是hacker啊。
当然,这里并不是真正的面向对象,因为其只是封装罢了,还没有支持继承和多态。最变态的是他居然还支持typeid,靠!
下面让我们看看他是怎么来做的。下面的脚本可能会有点费解。本想解释一下,后来想想,还是大家自己专研一下吧,其实看懂也不难,给大家提几个点吧。
- 我们可以看到,下面的这个脚本定义了class, func, var, new 等函数,其实这些就是所谓的关键字。
- class是一个函数,主要是记录类名。
- func和var实际上是把成员函数名和成员变量记成有相同前缀的各种变量。
- new方法主要是记录实例。大家重点看看new函数里的那个for循环,最核心的就在那里了。
脚本如下所示:
# -------------------------------------------------------------------# OO support functions# Kludged by Pim van Riezen <pi@madscience.nl># -------------------------------------------------------------------DEFCLASS=""CLASS=""THIS=0 class() { DEFCLASS="$1" eval CLASS_${DEFCLASS}_VARS="" eval CLASS_${DEFCLASS}_FUNCTIONS=""} static() { return 0} func() { local varname="CLASS_${DEFCLASS}_FUNCTIONS" eval "$varname=\"\${$varname}$1 \""} var() { local varname="CLASS_${DEFCLASS}_VARS" eval $varname="\"\${$varname}$1 \""} loadvar() { eval "varlist=\"\$CLASS_${CLASS}_VARS\"" for var in $varlist; do eval "$var=\"\$INSTANCE_${THIS}_$var\"" done} loadfunc() { eval "funclist=\"\$CLASS_${CLASS}_FUNCTIONS\"" for func in $funclist; do eval "${func}() { ${CLASS}::${func} \"\$*\"; return \$?; }" done} savevar() { eval "varlist=\"\$CLASS_${CLASS}_VARS\"" for var in $varlist; do eval "INSTANCE_${THIS}_$var=\"\$var\"" done} typeof() { eval echo \$TYPEOF_$1} new() { local local cvar="$2" shift shift local id=$(uuidgen | tr A-F a-f | sed -e "s/-//g") eval TYPEOF_${id}=$class eval $cvar=$id local funclist eval "funclist=\"\$CLASS_${class}_FUNCTIONS\"" for func in $funclist; do eval "${cvar}.${func}() { local t=\$THIS; THIS=$id; local c=\$CLASS; CLASS=$class; loadvar; loadfunc; ${class}::${func} \"\$*\"; rt=\$?; savevar; CLASS=\$c; THIS=\$t; return $rt; }" done eval "${cvar}.${class} \"\$*\" || true"}
- 面向对象的Shell脚本
- 面向 DBA 的 Linux Shell 脚本简介
- 面向 DBA 的 Linux Shell 脚本简介
- 面向 DBA 的 Linux Shell 脚本简介
- 面向 DBA 的 Linux Shell 脚本简介
- 面向 DBA 的 Linux Shell 脚本简介
- 面向 DBA 的 Linux Shell 脚本简介
- 面向 DBA 的 Linux Shell 脚本简介
- SHELL [面向对象设计]
- 页面漂浮脚本。第一个面向对象的js
- 从脚本编写到面向对象的 Python 编程
- 【shell脚本】shell的符号
- shell 脚本 与 shell 脚本的编写
- shell脚本:访问shell脚本的参数
- shell脚本的学习
- shell脚本的编写
- SHELL脚本的作用
- SHELL脚本的特性
- Fedora 15 简单配置
- 用bat执行java
- tostring
- 验证数字的正则表达式集
- 嵌入式程序员必须知道的ox10个问题
- 面向对象的Shell脚本
- Android NDK 是什么
- C#中的反射 Assembly.Load() Assembly.LoadFrom()
- STM32 uCOS下实现串口文件
- 嵌入式硬件开发流程及工程师应具备的基本技能
- jquery Ajax 跨域调用(jsonp)
- hdu 3874 树状数组
- Boost学习系列3-函数对象(下)
- ARM与嵌入式linux的入门建议