zoukankan      html  css  js  c++  java
  • linux下的powershell,pash试用手记

    ------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,2015-05-21修改。文章版本目前博客园为最新版。 允许转载,但必须保留名字和出处,否则追究法律责任

    ------2 pash目前实现了,下述命令:------

    Add-Member
    
    Add-PSSnapin
    
    Add-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-Service
    
    Resume-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 支持中文函数名,中文变量名。至少支持utf8编码的中文文件名。-----好!

    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.1.13 支持$a=$b=$c=111 这种多重赋值

    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

  • 相关阅读:
    Django 前戏
    SQL基本语句
    如何正确安装Mysql
    JQuery
    解疑答惑—解决脱离标准文档流(恶心的浮动)
    事件
    卷基于快照进行恢复
    centos7下Firewall使用详解
    基于镜像卷启动的虚机快照代码分析
    nova卸载volume源码分析
  • 原文地址:https://www.cnblogs.com/piapia/p/4330411.html
Copyright © 2011-2022 走看看