此贴告诉你:为啥shell脚本人,不建议学python
我看到用shell的人很多,你建议人用python,人说py是很好,但下一秒都跑光了。
------【1在linux安装powershell,并不是难题】------
curl -o /etc/yum.repos.d/microsoft.repo https://packages.microsoft.com/config/rhel/7/prod.repo
sudo yum remove -y powershell #删除旧版
sudo yum install -y powershell
pwsh -c 'mkdir -p "$env:HOME/.config/powershell" '
pwsh -c 'Add-Content -Value "Set-PSReadlineOption -EditMode Windows" -LiteralPath $profile '
pwsh -c 'Add-Content -Value "`nSubsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile" -LiteralPath /etc/ssh/sshd_config '
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo curl -o /etc/apt/sources.list.d/microsoft.list https://packages.microsoft.com/config/ubuntu/16.04/prod.list
sudo apt-get update
sudo apt-get remove -y powershell #删除旧版
sudo apt-get install -y powershell
pwsh -c 'mkdir -p "$env:HOME/.config/powershell" '
pwsh -c 'Add-Content -Value "Set-PSReadlineOption -EditMode Windows" -LiteralPath $profile '
pwsh -c 'Add-Content -Value "`nSubsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile" -LiteralPath /etc/ssh/sshd_config '
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo curl -o /etc/apt/sources.list.d/microsoft.list https://packages.microsoft.com/config/ubuntu/18.04/prod.list
sudo apt-get update
sudo apt-get remove -y powershell #删除旧版
sudo apt-get install -y powershell
pwsh -c 'mkdir -p "$env:HOME/.config/powershell" '
pwsh -c 'Add-Content -Value "Set-PSReadlineOption -EditMode Windows" -LiteralPath $profile '
pwsh -c 'Add-Content -Value "`nSubsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile" -LiteralPath /etc/ssh/sshd_config '
sudo apt-get update
sudo apt-get install curl gnupg apt-transport-https
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/microsoft.list'
sudo apt-get update
sudo apt-get remove -y powershell #删除旧版
sudo apt-get install -y powershell
pwsh -c 'mkdir -p "$env:HOME/.config/powershell" '
pwsh -c 'Add-Content -Value "Set-PSReadlineOption -EditMode Windows" -LiteralPath $profile '
pwsh -c 'Add-Content -Value "`nSubsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile" -LiteralPath /etc/ssh/sshd_config '
https://docs.microsoft.com/zh-cn/powershell/scripting/setup/installing-powershell-core-on-linux?view=powershell-6
------【2python定义变量,气死刘玄德】------
有一天,我想定义个变量叫做【3顾茅庐】但不行,研究了下发现不支持数字打头。
改了下定义成了【a3顾茅庐】,感觉不雅,一怒之下改成了【b3顾茅庐】。。。
阿三顾茅庐,瘪三顾茅庐。。。姓刘的学个python真是倒霉啊, ;-(
第一步变量名都定义不了,还能平天下么?
$52张扑克牌 = 'J','Q','K' #在powershell中合法
shell人喜欢用$1,$2,作为变量名,在py中也不行。ps无这些问题。ps函数名也支持数字打头,如1a。
$1 = 'xxx'
$2 = 'yyy'
${1} = 'xxx' #定义
${1} #使用。
你在powershell中,$if=1,完全正常。if是姨夫,$if是“四姨夫”,绝对不会搞错^_^
${1+2} = 'a' #不加大花括号不行
${a.b} = 'a'
${a:b} = 'a'
${a'b} = 'a'
------【3python没有shell命令行】------
ps命令行,不光可以运行ps命令,还能执行shell外部命令。如find,grep等。
powershell有shell命令行,有参数,有tab补全,这是ps的一个大优势,py的一个大弱项。
或者说从.py中运行shell命令,接收返回值麻烦。
ps有命令行颜色,命令行表格&对齐(format-table),命令行百分比进度条(Write-Progress)等,这些命令行相关的基本功能,py都没有吧?
------【4python没有管道】------
比如写py管道脚本,需要import,open,read,close。
py2有4个popen,
py3管道subprocess.Popen有各种坑,py为了解决这些坑,py有参数10多个,每个参数n个选项。导致在py中使用管道,变得很复杂。用起来很麻烦。
啥时候用true,啥时候用false参数?你得duang,duang实验。
这个麻烦直接把80%用户吓跑了。所以我“说成”没有管道。
而powershell,bash,使用管道数据,不需要这些步骤。
------【5shell命令,bash嵌入powershell容易,嵌入python难】------
shell人学powershell难度平滑,shell人学python难度陡峭。
引号的绝对引用,powershell用【@''@】,【@""@】。python用3个单引号。哪个更容易嵌入shell呢?
------【6py语法vs ps语法】------
python道:“来我告诉你,茴香豆的茴字,的40种写法”
powershell道:“来我告诉你,茴香豆的茴字,的2种写法”
powershell语法简单,没有三目,没有装饰器,
powershell这种做法,更容易区分内置关键字,和变量!
bash=1进程。内含1个线程。此线程可以执行1个,单线程bash。
python=1进程。内含1个线程。此线程可以执行1个py。一个py内可以有多线程,【单py内的多线程代码】加了复杂度,却没法用cpu多核。
powershell=1进程。内含n个线程。每线程可以执行1个ps1。每线程内的ps1,和单线程执行ps1,差别极小。还能用多核。
python功能强大,但语法复杂,门槛高于ps。
powershell和shell语法类似,更适合脚本人员,运维人员,非专业程序员。
人生苦短,我用powershell
------【7py癌症1,中文&编码问题多】------
常见的,处理中文文件名问题。url中带有中文问题。编码问题。
我一看软件,用了python,gt5的壳子。
打开一个"美眉.jpg",软件崩溃。改成英文名字,好了。
# 因为有本行中文注释。python2.7或python3.7 都不灵。除非加上【coding:】来声明编码,用【错误的编码来声明】也行。
print "Hello World!"
---a.py结束---
# 因为有本行中文注释。python2.7或python3.7 都不灵。除非加上【coding:】来声明编码,用【错误的编码来声明】也行。
print ("Hello World!")
---b.py结束---
乱码这个病,治法有很多,py大夫的治疗方案,我看不是最佳的。
微软家发明了bom头,powershell对bom头100%支持,
ps1脚本源码用bom头,txt用bom头。有头文件无乱码。
------【8py癌症2,无法锁死变量类型】------
py无法锁死变量类型,成为静态变量,真的很不爽。
这一点这很重要,甚至有人说py不适合大型项目。
https://www.v2ex.com/t/474197
可以动态: $a = 'xxx'
可以静态数据类型: [string]$a = 'xxx'
------【9py癌症3,1.6亿美金估值的公司被py这个特性毁了】------
l.append(1)
print(l)
f()
f()
python2.7,python3.6.8测试结果为:
[1]
[1, 1]
[1, 1, 1]
https://www.v2ex.com/t/467817
function f([System.Collections.ArrayList]$l=@())
{
$null = $l.add(1)
$l
}
f
f
f
输出:
1
1
1
------【10py癌症4,怎能少了你?python线程全局锁】------
搜 GIL threading Thread
powershell没这问题。
------【11py癌症5,路径依赖】------
而ps较好,一个【$env:PSModulePath】搞定。达到java的class-path水平。当然最好的是go的静态连接。
------【12py癌症6,py2和py3的兼容性】------
centos6,centos7,centos8---centos8没有默认py3
ubuntu1404,ubuntu1804---ubuntu1604默认py3
debian8,debian9
------【13py调试器】------
1界面英文,汉化的不太敢用,怕后门。
2要破解。
3英文原版st3,打开带有【中文变量名】,【中文注释】的.py,.ps1会乱码。
------【14手册】------
docs.microsoft.com中的。net手册,是多语种的,简单说就是中文的,比python的只有英文的手册强一万倍!!!
------【15其他:】------
python人太贵,运维的工资只能招到py低手。py高手有更挣钱的方向,【高富帅不愿入穷坑】写运维脚本。即便写出来。也很繁琐。又不好用。
py的远程ssh远程一堆坑 : https://zhangge.net/5122.html
py的sftp一堆坑,不如ps+winscp模块和命令 : https://zhangge.net/5121.html
目的,生成个文件a,并写入内容b。遇到temp147的目录癌症了。不是这样的目录,就完全没问题。ps没这问题。shell也没这问题。
------【16powershell的优势】------
ps中有,基于sshd的,远程命令行。支持客户端,服务器之间,直接传输对象。py不行。或者说ps远程的【序列化/反序列化】是透明的。
ps的远程命令,可以自动上传脚本,到远程。
invoke-command -session $a -filepath /tmp/客户机本地脚本1.ps1
ps有远程变量作用域,$using:a = 1,本地引用远程变量,远程引用本地变量,容易。
ps用大花括号包围脚本代码,而不用单双引号。经堡垒机,多层服务器,发送命令,更简单,有优势。
用vscode,加remote-ssh插件,可以远程打开保存在linux中的ps1文件。
可以单步,断点,鼠标选中n行,可以在win中远程调试linux中的ps1脚本。
linux中可以多线程,多进程并发运行ps1。多线程并发可以跑满多核cpu。
powershellwin中无敌。
很多虚拟机厂家,云厂家,官方发布powershell模块:
aws,vmware,dell,联想,citrix
虽然powershell库没有python那么多,但运维方面的基本不缺。
powershell对json,yaml,csv支持的也很好。
------【17python在脚本范畴的优势在哪?】------
有啥python行,而powershell不行的,你倒是说出来呀?
欢迎来diss powershell。
注意,基本应该围绕,脚本,运维,shell这一块。
此贴告诉你:为啥shell脚本人,不建议学python的更多相关文章
- shell脚本报错:"[: =: unary operator expected"
shell脚本报错:"[: =: unary operator expected" 在匹配字符串相等时,我用了类似这样的语句: if [ $STATUS == "OK&q ...
- 通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点
标题很长:通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点 不过目前从oozie调度测试的例子来看,oozie本身的retry好像并没有参数可以控制跳过失败的节 ...
- shell脚本报错:-bash: xxx: /bin/bash^M: bad interpreter: No such file or directory
当我们把文件从windows系统中编辑的文件拷贝到linux系统中,如果我们执行文件会保存如下的错: shell脚本报错:-bash: xxx: /bin/bash^M: bad interprete ...
- paip.执行shell cmd 命令uapi java php python总结
paip.执行shell cmd 命令uapi java php python总结 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:h ...
- 从shell(终端)中退出python
从shell(终端)中退出python: 1.输入命令行:$ exit() 2.快捷键: ctrl+Z
- 小白学 Python 爬虫(26):为啥上海二手房你都买不起
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- CRLF line terminators导致shell脚本报错:command not found
Linux和Windows文本文件的行结束标志不同.在Linux中,文本文件用"/n"表示回车换行,而Windows用"/r/n"表示回车换行.有时候在Wind ...
- shell脚本初析
简单理解:运用很多工具,将复杂的步骤简单化,体现在shell脚本中框架:必须有备注,写的别人能够看得懂开头:#! /bin/bash 代表的意思是改文件使用的是bash语法要想使用该种方法运行shel ...
- ubuntu终端执行shell脚本报command not found解决方法
使用sudo执行脚本报错:sudo: myshell.sh: command not found 原因:发生这种情况的原因是因为您正在尝试执行的脚本需要正确的权限 解决:执行sudo chmod a+ ...
随机推荐
- FCN用卷积层代替FC层原因(转)
原博客连接 : https://www.cnblogs.com/byteHuang/p/6959714.html CNN对于常见的分类任务,基本是一个鲁棒且有效的方法.例如,做物体分类的话,入门级别的 ...
- kfifo
kfifo 的一些伪代码 kfifo_len() out = LOAD fifo->out smp_rmb() len = LOAD fifo->in - out kfifo_in() k ...
- excel 知识备忘
public void UpdateShapesColor(string value) { foreach (Microsoft.Office.Interop.Excel.Shape chart in ...
- Ubuntu 安装最新版nodejs
转自:ubuntu快速安装最新版nodejs,只需2步 第一步,去 nodejs 官网 https://nodejs.org 看最新的版本号: 也就是说此时此刻,12.6.0 是最新的版本,不过你求稳 ...
- vue-列表动画
实现列表动画 li { border: 1px dashed #999; margin: 5px; line-height: 35px; padding-left: 5px; font-size: 1 ...
- 邮Z速递物流,让用户密码在网络中遨游
" 最近分析快递行业的APP上瘾了,求解救." 邮政作为快递行业一个傻大黑的存在,一直很奇怪,我一直在纳闷,邮政和EMS到底是不是一家,在很多网点,它们是一体的存在,但很多东西,又 ...
- git本地忽略
添加本地忽略文件 git update-index --assume-unchanged 忽略的文件名 恢复本地忽略文件 git update-index --no-assume-unchanged ...
- https://jwt.io/一个可以解析token的神奇网站
网址:https://jwt.io/ 效果:
- 网页解析 -- bs4 和 xpath 的简单使用
bs4 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库,它的使用方式相对于正则来说更加的简单方便 中文文档:https://beautifulsoup.read ...
- 30.Java基础_接口_抽象类_具体类实现案例
public interface SpeakEnglish { public abstract void speak(); } public abstract class Person { priva ...