自己总结的shell、perl和python的简单对比,欢迎交流!
【输出】
Shell:echo "hello,world"
Perl:print “hello,world”
Python:print "hello,world"
【变量定义】
Shell:
name=oudemen echo $name
perl:
$name 标量 print $name
@names 数组
%name 哈希变量
Python:
name=oudemen Print name
name=[] 普通链表,元素可变
name=()固定数组,元素个数不可变
name={m,n} 哈希数组
【子程序/函数】
Shell:
function 函数名()
{
语句块;
Return();
}
调用函数名 arg1,agr2,…
perl:
sub 子程序名{
my ($参数1,$参数2,$参数3)=@_;
语句块;
Return(返回值);
}
调用子程序 &子程序名
Python:
def 函数名(arg1,arg2,…argn):
……(注意,一定要有缩进[空格或者tab])
……
Return(x)
调用函数 函数名(arg1,arg2,…argn)
【if条件判断】
Shell:
if [条件表达式]
then
条件为真command
else
条件为假command
fi
perl:
if(条件表达式)
{
表达式为真的语句块;
}
或者 表达式为真的语句块 if 条件表达式;
或者 条件表达式&&表达式为真的语句块;
if(条件表达式){
条件表达式为真时的语句块;
}else{
条件表达式为假时的语句块;
}
或者 条件表达式?表达式1:表达式2 [如果条件表达式为真,执行表达式1,否则执行表达式2]
if(条件表达式1)
{
条件表达式1为真时的语句块;
}elsif(条件表达式2){
条件表达式2为真时的语句块;
}elsif(条件表达式3){
条件表达式3为真时的语句块;
}
……
else{
所以条件表达式为假时的语句块;
}
Python:
if 条件表达式1: 条件表达式1为真时的语句块
elif 条件表达式2: 条件表达式2为真时的语句块
else: 所以条件表达式为假时的语句块
【unless条件判断】
Shell:无
perl:
unless(条件表达式){
条件表达式为假执行的语句块;
}
或者 条件表达式为假执行的语句块 unless (条件表达式);、
或者 条件表达式 || 条件表达式为假执行的语句块
unless(条件表达式){
条件表达式为假时的语句块;
}else{
条件表达式为真时的语句块;
}
Python:无
【循环控制--while】
Shell{break跳出循环,continue跳出本次循环}:
While[条件表达式]
do
命令行
done
perl{ last退出循环,next终止本次循环,适用perl所有循环}:
while(条件表达式){
语句块;
}
或者 {语句块}while(判别表达式)
do
{
语句块;
}while(条件表达式) [跟while相比,do while保证语句块至少执行一次]
Python{break 跳出循环,continue结束本次循环}:
While条件表达式:
语句块
else:
语句块
【循环控制until】
Shell:
until 条件表达式
do
条件为假执行的语句块
done
perl:
until( 条件表达式)
{
语句块
}
或者 语句块 until(条件表达式);
do
{
语句块;
}until(条件表达式)
Python:无
【循环控制--for】
Shell:
for((初始表达式;条件表达式;循环过程运算式));
do
语句块;
Done
for i in 文件或数组
do
语句块;
Done
perl:
for(初始表达式;条件表达式;循环过程运算式)
{
语句块;
}
for 标量(数组变量)
{
语句块;
}
for (数组变量)
{
读取$_,处理数组相关的语句块;
}
foreach 标量(数组变量)
{
语句块;
}
foreach (数组变量)
{
读取$_,处理数组相关的语句块;
}
Python:
for i in range、数组或者字符串等
语句块(此行要缩进)