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
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
linux下的powershell,pash试用手记的更多相关文章
- 【Lamp】 Linux 下安装PHP+Apache+Mysql 手记
[0]写在最前 由于准备实习原因,今天又重温了Lamp的搭建过程,之前一直是看燕十八老师2012年的教程学习,因此今天也是拿了十八哥的lamp搭建笔记作参考.但这次按照笔记重新搭建,发现了很多问题,由 ...
- Linux下的sqlserver简单试用
微软自2017年就推出了可以在linux上使用的sql-server,最近接触到了一个用sqlserver的项目,便尝试使用了一下. 下载 为了简化安装,我还是使用的docker的方式,镜像可以直接从 ...
- linux下一键安装 powershell,的bash脚本
说明 目前,linux下的powershell约等于pash.希望大家专注mono,关注pash. 一键安装脚本包括for centos6,centos7,ubuntu 14.04 ubuntu 1 ...
- Docker折腾手记-linux下安装
Linux下的安装方法 博主用的是centos7,其它也是大同小异 我根据的是官网的教程进行的操作,地址是 https://docs.docker.com/engine/installation/li ...
- Window/Linux下Mysql的安装步骤
Windows下Mysql安装教程 首先讲一下Windows环境下安装Mysql,我使用的安装包版本是mysql-8.0.26-winx64 下载地址:MySQL下载 1.点击上面的下载地址得到zip ...
- Linux下,拷贝文件时,排除某些文件
一下是自己用到到几次实践,觉得很赞: 1.拷贝文件时,排除某些不需要的文件: 1)使用xargs来做: ls /tmp/test/ |grep -v .gz |xargs -i cp -r ...
- 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH
谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...
- linux下gcc编译多个源文件、gdb的使用方法
一. gcc常用编译命令选项 假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认 ...
- Linux下nl命令的用法详解
Linux中nl命令和cat命令很像,不过nl命令会打上行号,属于比较不常用的命令,下面随小编一起来了解下这个鲜为人知的nl命令吧. nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文 ...
随机推荐
- MyBatis学习笔记(三) 关联关系
首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...
- Intent 隐式跳转,向下一个活动传递数据,向上一个活动返回数据。
一.每个Intent只能指定一个action,多个Category. 使用隐式跳转,我们不仅可以跳转到自己程序内的活动,还可以启动其他程序的活动.使得Android多个程序之间的功能共享成为可能. 例 ...
- 在Linux或者Unix下打开,每一行都会出多出^M这样的字符
Windows上写好的文件,在Linux或者Unix下打开,每一行都会出多出^M这样的字符,这是因为Windows与*nix的换行符不同所致,我们看看文件格式有什么不同. 在Linux下查看文件格式: ...
- Windows不重启就使环境变量修改生效
以修改环境变量“PATH”为例,修改完成后,进入DOS命令提示符,输入:set PATH=C: ,关闭DOS窗口.再次打开DOS窗口,输入:echo %PATH% ,可以发现“我的电脑”->“属 ...
- vsphere vcenter 添加域管理员
选择 vcenter server 管理权限
- 小韦系统装工行网银U盾驱动的方法
小韦系统装工行网银U盾驱动的方法 拷贝文件.bat @echo 开始注册echo n|copy /-y scarddlg.dll %windir%\system32\echo n|copy /-y w ...
- mac app icon 设置
mac app icon 设置 1:目前 mac app 所需要的icon 图标尺寸 icon_16x16.png 16px icon_16x16@2x.png 32px icon_32x32.png ...
- aspcms标签使用经验
1.调用导航栏标签写法,sort是网站后台栏目管理的编号{aspcms:type sort=19} <a href="[type:link]" title="[ty ...
- 编译spock proxy
今天把spock proxy编译通过并且运行了.大家如果在编译这款类似于MySQL proxy的软件遇到问题时,可以联系我.微信onesoft007
- Java虚拟机类加载机制——案例分析
转载: Java虚拟机类加载机制--案例分析 在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...