开始学脚本,是学bash还是perl/python
发布网友
发布时间:2022-04-19 01:33
我来回答
共3个回答
懂视网
时间:2022-04-19 05:54
首先bash虽然有if_else,可以调系统命令。但是许多局限性比如不支持多线程,没有库。所以会py或者ruby再去学bash,这是没必要 的。
回复内容:
日常工作,很多工作都是很琐碎 很细节的,你想不到你会遇到什么具体的小任务。
这时,你总不能打开vim 写个python脚本。
很可能还没写完#! ,shell 可能已经搞定了任务了。
所以会shell,熟练掌握各种命令,会sed awk,给日常工作带来很大的效率提升。
相信每一个Linux下的讨饭吃的程序员都深有体会。
琐碎任务一次性的任务交给shell; 注定要扩展,代码量不小,要维护的任务交给python.
需要效率的工作交给C。从来就不冲突。
学习 bash,并不仅仅是学习 bash 本身的语法,而是要去学习一下各种命令行工具的使用方式……
说到底,一切都是为了提高生产效率啊!
有py shell和ruby shell等等一大堆东西
另外一个角度看, 是shell script 让你拥有system utility的能力, 所有已安装的程序都洗干净了排着队等你调戏。sed, awk, kill, cat, ps, mkdir, rm, rsync, ..... 数都数不过来的别人幸苦调教好的漂亮姑娘,而*nix与生俱来的特性(redirection, pipe ...)又让它们可以很好的协同工作(因此do one thing, well) 。
如果你的程序有很多custom logic, 需要面向复杂些的数据结构,shell 的笨拙就会比较明显,这个时候就去找sexy的Python吧。
用Linux,bash还是要懂的。但是bash的语法确实有点奇怪(通常都是把c的语法当做是标准语法,所以说一门语言语法奇怪,就是说这门语言跟c的语法规则相去甚远),所以要想写好用的script,最好是学一门基于c的比较现代的语言。我现在用的是Python,然后需要执行bash的命令,就调用os,基本上所以的bash命令都可以用os.system("")这种方式运行。迄今为止,我唯一发现不能用os.system运行的就是 cd. Python中可以用os.chdir("")来实现 bash 的 cd.
今天服务器异地迁徙,我的shell脚本成功运维了500台服务器,包括对对等拷贝虚拟机配置按IP修改,组件启停,日志备份,服务器运行状态监控。shell起码不需要python解释器,代码上又异常优雅,你觉得shell不舒服,还是受到传统命令式编程的框架桎梏。每次打开vim看到花花绿绿又十分简洁的shell都让人陶醉,谁他妈再让我写Java或者python 去搞运维我就跟谁急
如果你是写需要长期运营的脚本,强烈推荐用python(或ruby等其他),倒不是说这样会更快,更方便,而是可读和可维护会好些,类似的还有makefile等,bash、sed、awk和make中那些奇怪的语法和符号的学习维护成本真的不如python中多啰嗦几句,而且用python可以做到一招通杀大多数需求,不然你的脑子得在bash,sed,awk之间来回切换
但如果你的脚本可能只是运行个一次,或临时一条命令,用bash还是很方便的
所以,bash不用很精通,但要保证会到一定水平,日常的工作区分来做
然而你也不可避免会碰到阅读维护其他人代码的情况,所以还是大致要了解下,比如if的语法,至于if里面的-a -o -f之类的可以问度娘了
当然不是浪费时间了(不然你让我们这种会用shell的情何以堪...)
假设路上有一坨屎, 你是用铲子(shell)铲掉, 还是开个铲车(python)来搞?
当然, 也会有粪坑, 但是大部分情况下是路上横躺了一坨屎, 极有可能还是别人丢过来的.
而且shell也没那么恶心嘛. 真正的脚本呢.
在*nix服务器下调试程序,查看程序debug日志或者运行日志,如果不懂shell,蛋疼死你
bash和命令行都设计拙劣。但现状如此,你不学就寸步难行。
热心网友
时间:2022-04-19 03:02
必须python了,linux自带,不许要安装,比bash,perl更加模块化,方便维护,众多的第三方库,甚至你都不需要写什么代码,只要把各种库拼起来就完成项目了。
如果解决了您的问题请采纳!
如果未解决请继续追问
热心网友
时间:2022-04-19 04:20
python 的理念是『There is only one way to do it.』,然而它还是有2、3两个不兼容的版本,还是有 pip 和 easy_install 两个各有千秋的包管理器,http 库有官方自带的,但还是第三方的『Requests: HTTP for Humens』更好用。
反观 perl,标榜着『There's more than one way to do it.』,CPAN 上的『LWP』这个大而全的第三方 http 模块,无人不晓,但也有其它的第三方 http 模块,诸如曾经进入过 perl 官方模块的『HTTP::Tiny』、跟『Mojolicious』一起发布的『Mojo::UserAgent』等等;在面向对象方面,perl 本身的支持很弱鸡,现在是靠着 CPAN 上面的第三方模块『Moose』来提供完整的面向对象支持,当然,你没有用到『Moose』中的高级特性的话,也可以考虑使用运行更快的精简版本『Moo』;perl 本身自带了很多语法糖,所以,它也被戏称为『write-only language』,例如:
while ( defined( my $line = <> ) ) {
print $line;
}
可以简写为:
while (<>) {
ptint;
}
或者:
print while (<>);
有时候也会写出让人困扰的代码,所以,在团队合作的时候,一般都尽量避免使用 $_ 这个内置变量,而使用自己命名的变量。
python 里的『Ctypes』模块比较好用,perl 里要实现类似的功能只能动用 XS 了