使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了。今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之后跑去群子了威吓其他群友,不就是个玩嘛,走着~~!
说起Linux中的脚本,毋庸置疑,用得最多的肯定是Shell脚本,其他的还有Python、Ruby等,估计根本没有人会想到其实C#也可以。说起C#,那可是尚方宝剑版存在,它上可写操作系统(CosmosOS、SharpOS等)下可写应用系统,桌面程序、网站程序、嵌入式程序、其他程序一网打尽,写脚本?自然也是顺利成章的事情了。
好的,还是进入到本文的正式环境,本文中,我们将介绍:
(1)、C# Shell的简介。
(2)、编写我们第一个C# Shell脚本。
(3)、如何引入程序集。
一、C# Shell的简介
Shell,中文意为“壳”,它是一个提供用户与操作系统内核之间通讯的翻译器,常见的有有图形Shell和命令行Shell,它也是我们除安装操作系统外Linux首先学习的重点,我敢保证,所有的有使用过Linux的读者都会知道它。
C# Shell,也正如它的名称一样,它是一个Shell,所使用的命令行语言为C#。而事实上,它的原型是Mono项目中Tool中所提供的一个工具,它的本名为“C#REPL”,因此想要使用它,我们的Linux中必须已经安装了Mono,也即是有Linux.NET的环境。
关于Linux.NET的环境搭建,我不想老生常谈,仍然不懂的读者,请移步到《Linux.NET 学习手记》系列中。所有已经搭建好Linux.NET环境的机器中,都可以通过执行命令“/bin/env csharp”执行C# Shell命令解析器。系统控制台这时会进入到C# Shell终端(有点像Telnet连接的样子)。
然后我们就可以在里面键入各种各样的命令,想要退出的时候执行“quit”即可退出回到Linux命令终端。
二、编写第一个C# Shell脚本
对于平时有些Linux Shell的读者来说,经过上一节的介绍,大概也已经知道这是怎么回事了。对于不懂Shell的读者,也不要紧,我们本节就是教大家如何编写一个C# Shell。先给各位展示一下一个“标准”的Shell是什么格式的。
这里是一个常见的Bash Shell脚本,作用就是输出十遍的“小蝶惊鸿大法好”。一个普通的Linux Shell脚本由主要由两个部分所构成,第一就是它的解析器声明,也就是头部的第一行,它用来指明这个脚本是使用哪一款的Shell解析器进行解析。由于不同的Shell解析器之间各自有自己的Shell命令行,因此让计算机能够选择出正确的Shell解析器非常重要。另外就是Shel脚本的主程序体,由于Shell脚本是通过解析器执行,因此它的执行方式是从本文第一行开始解析执行,并按照文本的行来逐行解析执行,因此原则上我们是可以像“流水账”一样写程序(不考虑可维护性的话)。
下面我们也按照这种“标准格式”也写一个C# Shell。
首先我们先新建一个文件,后缀名什么的无所谓了,Linux中是没有后缀名的这个概念的,然后打开并填写上解析器的位置,也即是第一行。
然后我们就可以在里面跟平时用C#一样写上我们的代码了(中文注意编码)。
保存后,在Linux添加执行权限,然后运行它(本脚本文件名字为demo.cs)。
酱酱~!有趣的事情发生了。
三、如何引入程序集
现在我们已经证明了C# Shell脚本的可行性,也让各位读者简单学习了如何编写C# Shell脚本,已经具备了初步的使用价值,但由于解析器默认指挥引入“System”里面的东西,因此暂时只能做一些很简单的东西。
与其他“单薄”的语言不同,C#拥有极其丰富而强大的类库,它们才是C#中的大部队,在各个时刻各种场合中,我们都需要使用到它们。现在就让我们来学习如何调用它们。
在Linux.NET中,程序集主要来自于两个地方,Mono自带的基础库以及我们手动引入的第三方类库,对于它们,我们都会分别进行讲解。
先讲解基础库,Mono自带的基础库可在Mono编译安装的目录中找到它们,想要引用它们,我们只需直接在脚本中使用“Using 命名空间”即可加入它们,其效果如下:
程序集能够自动被引入并正常使用。而对于第三方类库,由于它并没有默认加入到引用中,因此 我们需要手动的将这个程序集Load进来。要Load第三方程序也比较容易,只需使用“LoadAssembly("程序集的物理位置【不要dll后缀】")”然后再使用“Using 命名空间”的方式即可。
Clear,又可以继续玩了。
好的,本篇内容又差不多了,写本文的目的仅仅是提供Shell脚本的多一重选择,并不是要取代Bash、Python之类的经典,各位读者可以在自己的机器上玩玩。有疑问的读者或者对Linux.NET感兴趣的读者可以关注我微博或者到“OWIN【Open Web Interface for .NET】)群”联系我(Q群号:373470340)。噢,对了,还有关于C# Shell与Bash Shell互调的问题,我还没有找到好的方法,各位读者有啥灵感的也可以联系我,谢谢。
个人博客文章对应地址:http://jhonge.net/Home/Single2/1802
使用C#给Linux写Shell脚本的更多相关文章
- 使用C#给Linux写Shell脚本(下篇)
在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- 写shell脚本速查笔记
linux shell脚本的语法蛋疼,而且对于java开发人员来说又不常用,常常是学了一次等到下次用的时候又忘记了.因此制作这个速查笔记,用于要写shell脚本时快速回忆&速查. 获取当前脚本 ...
- 十分钟学会写shell脚本
大家好!我是handsomecui,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖. 1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺 ...
- Linux常用Shell脚本珍藏【转载】
我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...
- 从windows到linux的shell脚本编码和格式问题
从windows到linux的shell脚本编码和格式问题 从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...
- Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间
Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...
- Linux:从windows到linux的shell脚本编码和格式
从windows到linux的shell脚本编码和格式问题 异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh start.sh,时会报Command not found等等的错误, ...
- Linux/Unix shell 脚本中调用SQL,RMAN脚本
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...
随机推荐
- 页面嵌入dom与被嵌入iframe的攻防
1.情景一:自己的页面被引入(嵌入)至别人的页面iframe中 if(window.self != window.top){ //url是自己页面的url window.top.location.hr ...
- 前端框架 EasyUI (0) 重新温习(序言)
几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...
- 菜鸟学Struts2——零配置(Convention )
又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...
- 解决PHP-问题:Class 'SimpleXMLElement' not found in
1.问题 在ubuntu 16.10中,学习PHP,学习到PHP如何生成XML文件时候,碰到了这个问题: PHP Fatal error: Class 'ClassName\SimpleXMLElem ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- ASP.NET WebApi OWIN 实现 OAuth 2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...
- Android公共title的应用
我们在开发Android应用中,写每一个页面的时候都会建一个title,不是写一个LinearLayout就是写一个RelativeLayout,久而久之就会觉得这样繁琐,尤其几个页面是只是标题不一样 ...
- 数据的双向绑定 Angular JS
接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...
- LINQ to SQL Where条件
1. 适用场景 实现条件的过滤和查询等功能. 2. 说明 跟SQL语句中的where作用相似,都起到了范围的限定即过滤的作用,而判断条件是紧跟后面的条件子句.where主要分为三种形式:简单形式.条件 ...
- date命令
GNU的date提供+%s(小写s), 能打印出自1970-01-01 00:00:00到当前时间的秒数. 这可能大家都不陌生,但有两点需要注意: 1. %s存在于GNU扩展版本.像在solaris等 ...