在這個逼格決定人格,鄙視鏈盛行的年頭,尤其是咱們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