linux下的powershell,pash試用手記

來源:互聯網
上載者:User

標籤:

------1 概述------

1.1 簡單來說linux,unix是非常依賴指令碼的,而win不是。win中有很多圖形程式+c庫,效率不比指令碼差。點幾下滑鼠照樣能完成需求。當 然,圖形和字元是兩碼事,不能完全替代。

1.2 win中的bat和linux中的bash都是老指令碼語言,縱橫沙場幾十年,功勳卓著。但由於太老,有很多限制和缺陷。用起來比python和powershell差 很多,麻煩很多。一般來講玩python和powershell的不樂意用。總之新的大有替代老的之勢。

1.3 簡單來講pash就是bash+第三方的powershell。

1.4 pash比bash(主要)好在哪?

1.4.1 我認為pash繼承了powershell的文法簡單,符合習慣的優點。 如用大花括弧來做程式碼片段頭尾,有foreach,等。

1.4.2 pash調用mono庫,是物件導向指令碼。支援靜態、動態.net類。 如:"aBc".toupper()

當然類庫的支援還很不完善,需要你貢獻代碼。

1.5 至c#程式猿:

雖然powershell調用.net的文法比c#簡單,但很多c#人並不想用powershell文法。 他們想用c#文法另做shell,因為他們熟悉c#,他們眼中的shell文法應該和c#相同。

但他們還是繞不過【物件導向的命令列類庫】吧。 【物件導向的命令列類庫】大都在System.Management裡, 還有【支援對象的管道】功能,是從powershell開始,才發明的。

 

powershell 傳教士 原創文章 始於2014-09-20,2014-11-30,2015-01-18,2015-03-11修改。文章版本目前部落格園為最新版。 允許轉載,但必須保留名字和出處,否則追究法律責任

 

------2 pash目前實現了,下述命令:------
Add-MemberAdd-PSSnapinAdd-Type                                                                   Clear-Variable                                                                   Convert-Path                                                                 ConvertTo-Csv                                                                   ConvertTo-Html                                                                 Copy-Item                                                                   Export-Csv                                                                   ForEach-Object                                                                   Format-Default                                                                   Format-List                                                                   Format-Table                                                                   Get-ChildItem Get-Command Get-Date Get-Help Get-History Get-Host Get-Location Get-Member Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Random Get-Service Get-Variable Import-Csv Join-Path Move-Item New-Alias New-Item New-Object New-Variable Out-Default Out-File Out-Null Remove-Item Remove-PSSnapin Remove-Variable Rename-Item Restart-ServiceResume-Service Select-Object Set-Alias Set-Location Set-Variable Sort-Object Split-Path Start-Service Start-Sleep Stop-Process Stop-Service Suspend-Service Tee-Object Write-Debug Write-Error Write-Host Write-Output Write-Progress Write-Verbose Write-Warning
View Code

 

 

powershell的特色命令: Select-Object,Where-Object,Group-Object中,只實現了第一個。

沒有任何invoke-*命令。如:invoke-command。 有Get-Variable命令,但後面是否跟變數名,都不靈。

Import-Module這個重量級的命令還不支援。

 

------3 測試指令碼內容------

------4 pash試用結論------

只測試過utf8編碼儲存檔案。

4.1好處:

4.1.1 斷行符號設定為cr,lf,crlf都能正確運行。

4.1.2 空格設定為空白格,tab鍵,全形空格,都能正確運行。----bash無法識別中文空格,即全形空格,但pash無此問題。

4.1.3 支援中文函數名,中文變數名。-----好

4.1.4 支援靜態類,靜態方法,和這種寫法,如:    [array]::Sort($mmm)

4.1.5 命令不區分大小寫,get-process和Get-Process都好用。

4.1.6 中文支援比原生powershell好,參見麻將八萬的測試代碼。

4.1.7 支援變數範圍,並工作正常。

4.1.8 支援 -match,並結果正確。

4.1.9 支援 -f ,結果正確。

4.1.10 支援$a++ ,$a--等。

4.1.11 最新版已經修複下面這個問題。    

不支援 未定義先引用變數,如:$temp2 = $temp2 + ‘aaa‘     但支援這樣:$temp2 =  ‘aaa‘ + $temp2

4.1.12 最新版已支援do { }  while ( ),和while () { }。

 

4.2 目前不支援:

4.2.2 不支援switch。----這個問題也不大,我更喜歡if嵌套,更直觀。

4.2.3 數組:不支援包含參數,即不支援 -contains,和 $數組.contains("a") 。數組也不支援-join。   

字串:不支援 -replace 。

這些個是什嗎?只是文法糖而已。   

文法糖是什嗎?是給菜鳥程式員製造的,簡單好用的功能。   沒有這些個功能,我們照樣可以用原生的。net文法代替。   

如 string.replace:

$aaaa = ‘aaaa?cccc?ddd?kkkkk‘   $bbbb = $aaaa.replace(‘?‘,‘-‘)   write-host $bbbb

 

4.2.4 不支援@‘‘@,@""@的引用。----前後我已經帶了斷行符號,並且在win中測試通過。

4.2.5 不支援變數首碼[string]$a ,[int32]$a。

   

 

4.3bug:

4.3.1 else,elseif 不能放在行首。    -----這個bug已經修複

 

---------------5 pash點評-----------------

get-content 不支援就真的不好了。但如此,我們就武功就全廢了嗎?

還好建立alias的new-alias和$profile功能是好的,這樣我們就可以用原生的linux命令建立別名了。

如: echo   "new-alias get-content-linux /usr/bin/cat"  >>  /root/.Pash_profile.ps1 #這裡的root根據使用者名稱改變。

這樣我們就有了 get-content-linux 這個命令,我們的武功全都回來了。

 

---------------6 pash指令碼案例-----------------

 

#!/opt/mono/bin/mono     /Pash/Source/PashConsole/bin/Debug/Pash.exe # test2.ps1 # 每行文字前插入 ‘aaa‘ $要處理的檔案  =  ‘/etc/sysconfig/network-scripts/ifcfg-lo‘ $每行檔案 = get-content-linux $要處理的檔案foreach ($temp  in $每行檔案) {      $temp2 = $temp2 + ‘aaa‘ + $temp + "`r`n"} out-file $temp2 /root/ttt.txt -encoding utf8

 

---------------7 pash安裝-----------------

7.1 安裝mono

7.2 git 並編譯pash

具體看上一篇文章 http://www.cnblogs.com/piapia/p/4279253.html

---------------8 千言萬語 總結成一句話:-----------------------

希望大家多研究,多關注powershell,多關注pash,多分享~~~ 2015-01-18

 

linux下的powershell,pash試用手記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.