python和shell有什么区别

python和shell有什么区别,第1张

1、Python不需要记忆太多的命令,语法简单,有C基础的人学起来非常容易上手,易于使用;而shell要学的命令有很多,但常用的命令不是很多。

2、Python可移植性好,它的标准是统一的,不会出现因为平台的不同运行结果不同,但shell的命令在各个平台上有些不一样。

3、Python更加强大,shell是一种命令语言,同时也可以看成是一个命令解释器,用于接收诸如awk、sed的命令调用等完成相关的功能。而Python则是一种编程语言,Python提供给程序员更大的自由度和灵活性,以完成shell所不能完成或者难于完成的编码任务,如实现面向对象的模块化设计、 *** 作服务器数据库等。

4、Python支持面向对象、支持可扩展性和可嵌入性,同时提供了功能丰富的库。

5、性能方面,很明显地,Python的执行效率要高于shell,有一个很充分的理由就是shell本身的各种进程间IPC通信要造成相当大的开销;而Python底层是C语言实现的,其性能可以接近于C,但具体相同功能的Python代码量却要比C短很多倍,因此Python的性能高于shell。

Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:

bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。

sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。

另外还有:ash、 csh、 ksh等。

扩展资料:

常见的编程语言分为两类:一个是编译型语言,如:c/c++/java等,它们远行前全部一起要经过编译器的编译。另一个解释型语言,执行时,需要使用解释器一行一行地转换为代码,如:awk, perl, python与shell等。

Shell 经过了POSIX的标准化,所以它是可以在不同的linux系统上进行移植。

关于注释的问题: 在shell中使用#进行注释,注意,sh里面没有多行注释,只能每一行加一个#号;

Q1: shell如何执行“简单”命令?

A: 这里的简单命令和bash参考手册里的含义相同,形式上一般是:命令的名称加上它的参数。有三种不同的简单命令:

1内置命令(builtin)

是shell解释程序内建的,有shell直接执行,不需要派生新的进程。有一些内部命令可以用来改变当前的shell环境,如:

cd /path

var=value

read var

export var

2外部命令("external command" or "disk command")

二进制可执行文件,需要由磁盘装入内存执行。会派生新的进程,shell解释程序会调用fork自身的一个拷贝,然后用exec系列函数来执行外部命令,然后外部命令就取代了先前fork的子shell。

3shell脚本(script)

shell解释程序会fork+exec执行这个脚本命令,在exec调用中内核会检查脚本的第一行(如:#!/bin/sh),找到用来执行脚本的解释程序,然后装入这个解释程序,由它解释执行脚本程序。解释程序可能有很多种,各种shell(Bourne shell,Korn shell cshell,rc及其变体ash,dash,bash,zshell,pdksh,tcsh,es),awk,tcl/tk,expect,perl,python,等等。在此解释程序显然是当前shell的子进程。如果这个解释程序与当前使用的shell是同一种shell,比如都是bash,那么它就是当前shell的子shell,脚本中的命令都是在子shell环境中执行的,不会影响当前shell的环境。

Q2: shell脚本是否作为单独的一个进程执行?

A: 不是,shell脚本本身不能作为一个进程。如上面讲的,shell脚本由一个shell解释程序来解释、运行其中的命令。这个shell解释程序是单独的一个进程,脚本中的外部命令也都作为独立进程依次被运行。这也就是为什么ps不能找到正在运行的脚本的名字的原因了。作为一个替代方案,你可以这样调用脚本:

sh script-name

这时shell解释程序“sh”作为一个外部命令被显式地调用,而script-name作为该命令的命令行参数可以被我们ps到。

另外,如果你的系统上有pidof命令可用,它倒是可以找出shell脚本进程(实际上应该是执行shell脚本的子shell进程)的进程ID:

pidof -x script-name

Q3: shell何时在子shell中执行命令?

A: 在此我们主要讨论Bourne shell及其兼容shell。在许多情况下shell会在子shell中执行命令:

1()结构

小括号内的命令会在一个子shell环境中执行,命令执行的结果不会影响当前的shell环境。需要注意是此时变量$$会显示当前shell的进程id,而不是子shell的进程id。

参考:

{;}结构中的命令在当前shell中执行,(内部)命令执行的结果会影响当前的shell环境。

2后台执行或异步执行

command&

命令由一个子shell在后台执行,当前shell立即取得控制等候用户输入。后台命令和当前shell的执行是并行的,但没有互相的依赖、等待关系,所以是异步的并行。

3命令替换

`command`(Bourn shell及兼容shell/csh)

$(command)(在ksh/bash/zsh中可用)

将command命令执行的标准输出代换到当前的命令行。command在子shell环境中执行,结果不会影响当前的shell环境。

4管道(不同的shell处理不同)

cmd1|cmd2

cmd1和cmd2并行执行,并且相互有依赖关系,cmd2的标准输入来自cmd1的标准输出,二者是“同步”的。

对管道的处理不同的shell实现的方式不同。

在linux环境下大多数shell(bash/pdksh/ash/dash等,除了zshell例外)都将管道中所有的命令在子shell环境中执行,命令执行的结果不会影响当前的shell环境。

Korn shell的较新的版本(ksh93以后)比较特殊,管道最后一级的命令是在当前shell执行的。这是一个feature而非BUG,在POSIX标准中也是允许的。这样就使下面的命令结构成为可能:

command|read var

由于read var(read是一个内部命令)在当前shell中执行,var的值在当前shell就是可用的。

反之bash/pdksh/ash/dash中read var在子shell环境中执行,var读到的值无法传递到当前shell,所以变量var无法取得期望的值。类似这样的问题在各种论坛和news group中经常被问到。个人认为command|read var的结构很清晰,并且合乎逻辑,所以我认为Korn shell的这个feature很不错。可惜不是所有的shell都是这样实现的。:(如开源的pdksh就是在子shell执行管道的每一级命令。

Korn shell对管道的处理还有一个特殊的地方,就是管道如果在后台执行的话,管道前面的命令会由最后一级的命令派生,而不是由当前shell派生出来。据说Bourne shell也有这个特点(标准的Bourne shell没有测试环境,感兴趣的朋友有条件的可以自行验证)。但是他们的开源模仿者,pdksh和ash却不是这样处理。

最重要的区别是 C shell 有一部分语法是基于 C 语言的,而 Bash 是原始的 Shell Script。

你可以通过它们的提示符来区分,Bash 的是 '$' 而 Csh 的是 '%'。

Bash 的基本语法在 POSIX 中有定义,而 Csh 不是 POSIX 的一部分。

Shell:Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支脚本:脚本,是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。Shell脚本:shell脚本(shellscript)就像早期dos年代的bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个 *** 作执行多个命令,而shellscript更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。shell和shell脚本区别:Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。可以用Shell来启动、挂起、停止甚至是编写一些程序。Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是所说的shell脚本)。

以上就是关于python和shell有什么区别全部的内容,包括:python和shell有什么区别、linux中shell分多少种,都有什么区别、unix编程中各种shell的区别还有实际应用中各脚本在不同shell下区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10097492.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存