標籤:
------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試用手記