python和shell都是我们经常使用的脚本语言,平时python主要用来写一些小型的任务,shell则在使用liunx系统部署任务的时候用的比较多,由于两者有一些相似之处,时间长了容易混掉,所以这里作文对一些基础的语法需求总结、比较、归纳,以为后用。

变量

python定义和使用只需要使用变量名,例如

var=“hello”
print var
# hello
  • 1
  • 2
  • 3

shell定义变量只需要变量名,而使用变量的值则需要加$符号,例如

var="hello"
echo $var
# hello
  • 1
  • 2
  • 3

数组的定义

python中没有数组的概念,但是有list,tuple,dict等可以代替其功能,声明一个list并使用其中的一个元素如下

numbers=[1,2,3,4,5]
print numbers[0]
# 1
  • 1
  • 2
  • 3

shell中只有一维数组,其声明和使用方法如下

numbers=(1 2 3 4 5)
print ${numbers[0]}
# 1
#返回所有的值用
print ${numbers[*]}
# 1 2 3 4 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注释

python和shell都可以是用#号添加单行注释,python可以使用”’注释”’添加多行注释

逻辑判断

条件的定义

在python中,除了所有的空值被认为False外所有的值都被解释为真True,这里的空值包括:None,0,”“,(),{},[]和False,下面是例子 
 
其他的由比较运算符进行比较支持,其中比较特殊的操作符有 
* x is y x和y是同一个对象 
* x is not y 
* x in y x在y集合中 
* x not in y

逻辑预算法用and,or,not.

而shell的理念大不相同,它使用test命令来进行条件测试,它通常写成[ condition ]的形式,注意方括号两边都要有空格,它支持三类测试: 
* 数值比较,需要用-eq,-gt来代替==,> 
* 字符串比较,可以用=,需要用-n之类的短命令,比如-n str来判定str长度是否非零 
* 文件比较,需要用短命令,例如-e file判断文件是否存在

逻辑运算符&&,||来连接不同的[ condition ]

另外,高级的数学表达式推荐使用(( expression ))逻辑判定,可以使用自增++,位移运算符<<,位运算符&,逻辑与&&等等 
高级的字符串判定使用[[ expression ]]逻辑判定,可以用类似于正则表达式如[[ $teststr== r* ]]判定以r开头的字符串 
shell的数值运算推荐使用$[expression]的方式计算,浮点数的计算使用echo “expression”| bc的方式获取计算值

if else

python中的if else使用方式如下,条件语句后加冒号,并且以缩进划分语句块

if condition:
statement
elif condition:
statement
else:
statement
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

shell中则不同,其if else使用方式如下,它使用then和elseif或fi来界定语句块,理论上不需要缩进

if [ condtion ]
then
statement
elif [condtion]
then
statement
else
statement
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

for循环

python的for循环使用如下,仍然用缩进划分语句块

for item in sequence:
statement
  • 1
  • 2

shell中for的使用方式类似

for item in list
do
statement
done
  • 1
  • 2
  • 3
  • 4

其中shell取item的分隔符全局变量为IFS(internal field separator),其默认值为空格,制表符,换行符,所以如果需要按行处理而忽略空格的话需要改变IFS的值 
另外shell还支持c语言形式的for循环,它使用双小括号来完成,形式如下

for (( i=1; i<=10;i++))
do
statement
done
  • 1
  • 2
  • 3
  • 4

while循环

python的while写法如下

while condition:
statement
  • 1
  • 2

shell的while写法如下

while [ conditon ]
do
statement
done
  • 1
  • 2
  • 3
  • 4

异常处理

python的异常处理方式

try:
statement
except:
statement
finally:
finalStatement
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

shell中没有相应的异常处理机制,只有每条命名的错误输出描述符2,可以通过2>&1将错误输出重定向到标准输出

文件操作

python使用open函数,其有读写模式有只读r,只写w,添加a

myfile=open("filename","r")
myfile.readlines()
myfile.close()
with open("finename","w") as myfile:
myfile.write("line\n")
  • 1
  • 2
  • 3
  • 4
  • 5

shell读取文件的内容使用命令来读取,然后使用管道或者重定向进行输入处理,常用的命令有 
1. cat filename 读取文件的全部内容 
2. tail -n 2 filename读取尾两行 
3. head -n 2 filename读取前两行

一个经典的问题,读取一个文件中的每一行做处理,使用python很简单

with open("filename","r") as myfile:
for line in myfile.readlines():
print line
  • 1
  • 2
  • 3

使用shell

cat filename|while read line
do
echo $line
done
#或者
IFS='\n'
for line in `cat filename`
do
echo $line
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

函数

python的函数如下形式

def functionname(params):
'函数文档'
statement
return value
  • 1
  • 2
  • 3
  • 4

其中函数文档可以通过functionname.doc获得 
shell中函数形式

function functionname {
commands
return value
}
  • 1
  • 2
  • 3
  • 4

使用变量获取返回值,参数通过函数functionname param1 param2的方式传递,通过$1,$2的方式取出第一第二个参数,$#为参数数量,$*为所有参数。

python和shell对比的更多相关文章

  1. Python shell对比

    对Python.shell的一些思考 如果使用python去写脚本来处理日常事务的话,相对于shell是一件比较麻烦的事情,因为我可以使用shell在花费更少的时间内,比较熟练地使用awk.sed和g ...

  2. python 调用 shell 命令方法

    python调用shell命令方法 1.os.system(cmd) 缺点:不能获取返回值 2.os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等   ...

  3. 【转】为eclipse安装python、shell开发环境和SVN插件

    原文网址:http://www.crazyant.net/1185.html eclipse是一个非常好用的IDE,通常来说我们都用eclipse来开发JAVA程序,为了让开发python.shell ...

  4. python执行shell获取硬件参数写入mysql

    最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...

  5. python调用shell, shell 引用python

    python 调用 shell get_line_num="wc -l as_uniq_info | awk '{print $1}'" ###get the lines of & ...

  6. python 调用shell命令三种方法

    #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器: #!/usr/bin/env python这种用法是为了防止操作系统用户没有将pyth ...

  7. PowerShell与Unix Shell对比:八大实例

    PowerShell与Unix Shell对比:八大实例 本文将从八个实例对比PowerShell和Unix Shell,通常是Linux Bourne Shell(包括sh.ksh和bash等).二 ...

  8. Go/Python/Erlang编程语言对比分析及示例

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴 ...

  9. python编写shell脚本详细讲解

    python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...

随机推荐

  1. 无法打开物理文件 XXX.mdf“,操作系统错误 5:”5(拒绝访问。)"的解决办法

    http://blog.csdn.net/blackfield/article/details/6550499 用T-SQL命令附加数据库时,出现如下异常信息: 无法打开物理文件 XXX.mdf&qu ...

  2. php-5.6.26源代码 - PHP文件汇编成opcode、执行

    文件 php-5.6.26/Zend/zend.c ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int f ...

  3. 微信小程序本地缓存

  4. 选择排序算法Java实现

    一. 算法描述 选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1 ...

  5. Oozie 实战之 shell

    说明:使用 shell action 执行 shell 脚本 hive-select-test.sh 来通过已经配置好的 Hive -f 来执行 HQL 查询脚本文件 select.sql 1.创建脚 ...

  6. [bzoj3196][tyvj1728]普通平衡树

    真是太差了,到现在才打出一个平衡树的板子.. 感谢blackjack大佬提供的数组版treap板子!!基本完全照搬,blackjack太神啦! 但目前我只会这几个最基本的操作(说白了STL的(mult ...

  7. Atom使用插件精选(FE)

    [转]原文https://zhuanlan.zhihu.com/p/24753739?refer=AlenQi Atom琳琅满目的插件中,为前端coder推荐一些实用的插件. sync-setting ...

  8. Java中数据类型转换&基本类型变量和对象型变量

    1.Java的数据类型分为三大类 布尔型,字符型和数值型 其中数值型又分为整型和浮点型 2.Java的变量类型 布尔型 boolean 字符型 char 整型    byte,short,int,lo ...

  9. 以最省内存的方式把大图片加载到内存及获取Exif信息和获取屏幕高度和宽度的新方法

    我们在加载图片时经常会遇到内存溢出的问题,图片太大,我们加载图片时,一般都是用的如下一般方法(加载本地图片): /** * 不作处理,去加载图片的方法,碰到比较大的图片会内存溢出 */ private ...

  10. 剑指Offer - 九度1369 - 字符串的排列

    剑指Offer - 九度1369 - 字符串的排列2014-02-05 21:12 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所 ...