python和shell都是我们经常使用的脚本语言,平时python主要用来写一些小型的任务,shell则在使用liunx系统部署任务的时候用的比较多,由于两者有一些相似之处,时间长了容易混淆,所以在这里给大家介绍一下两者的用法区别。
变量
python定义和使用只需要使用变量名,例如:
var=“hello” print var # hello
shell定义变量只需要变量名,而使用变量的值则需要加$符号,例如:
var="hello" echo $var # hello
数组的定义
python中没有数组的概念,但是有list,tuple,dict等可以代替其功能,声明一个list并使用其中的一个元素,如下:
numbers=[1,2,3,4,5] print numbers[0] # 1
shell中只有一维数组,其声明和使用方法,如下:
numbers=(1 2 3 4 5) print ${numbers[0]} # 1 #返回所有的值用 print ${numbers[*]} # 1 2 3 4 5
注释
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
shell中则不同,其if else使用方式如下,它使用then和elseif或fi来界定语句块,理论上不需要缩进
if [ condtion ] then statement elif [condtion] then statement else statement fi
for循环
python的for循环使用如下,仍然用缩进划分语句块
for item in sequence: statement
shell中for的使用方式类似
for item in list do statement done
其中shell取item的分隔符全局变量为IFS(internal field separator),其默认值为空格,制表符,换行符,所以如果需要按行处理而忽略空格的话需要改变IFS的值。
另外shell还支持c语言形式的for循环,它使用双小括号来完成,形式如下:
for (( i=1; i<=10;i++)) do statement done
while循环
python的while写法,如下:
while condition: statement
shell的while写法,如下:
while [ conditon ] do statement done
异常处理
python的异常处理方式
try: statement except: statement finally: finalStatement
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")
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
使用shell
cat filename|while read line do echo $line done #或者 IFS='\n' for line in `cat filename` do echo $line done
函数
python的函数如下形式:
def functionname(params): '函数文档' statement return value
其中函数文档可以通过functionname.doc获得
shell中函数形式
function functionname { commands return value }
使用变量获取返回值,参数通过函数functionname param1 param2的方式传递,通过$1,$2的方式取出第一第二个参数,$#为参数数量,$*为所有参数。