牛骨文教育服务平台(让学习变的简单)
博文笔记

perl和shell的语法不同之处

创建时间:2014-07-06 投稿人: 浏览次数:247

catalogue

1 变量定义
2 括号
3 数值计算
4 数值和string比较
5 数组
6 正则,模式识别

=================

将shell和perl中的很多文章都可以归并到这里,变成一篇系统性的长文
eg:eq for shell is num compare, eq for perl is string compare
perl: elsif (else if 比较特殊), shell:elif
perl:define variable , $a=1; shell: a=1
perl:split /[_s]/ 可以多个条件,还可以正则
perl 类c语言,“;”结束
eq 也不同
perl:  if ( $tmp[$#tmp] eq "LABEL" )
shell: if ( $tmp[$#tmp] -eq "LABEL" )

perl: 替换$string=~ s/[ ]/ /g;  将line中的 换成空格

=======================

整个数组输出

echo "${a[@]}"是打印全数组
perl
print "@a"
数组长度
shell
cnt=${#a[@]}
perl 
$d=@a
or 
$#a 数组最后一个索引,即长度-1

数组,string长度的perl和shell的不同获取方法
perl 
$a1=@a;
$b1=length($str)
shell
字符串长度
${#string}

expr length $string


数组和string的转化

shell

str=`ls $path |egrep "(^s)"`
a=$str    这是是将string 整体赋予数组的第一个元素
str=`ls *`
set -A a ${str}  这个是将整个数组分别赋予数组的各个元素


数组转string呢
b="${a[*]}"

perl的数组和string的转化呢
split()/joint()


string处理

shell用模式识别

perl用substr or 正则


shell,perl的加法,数值比较
perl $i++
shell expr ,(()),typeset -i i=0
shell是以string为基础的语言,数学运算要特殊处理
i=`expr $i+1`
((i=i+1)) 注意(())里面没有$
perl不需要


perl,shell 字符串和数值比较
都是分开
perl 
eq 是string 比较 ,==是数值比较
shell
-eq 是数值比较,== 是string比较


shell语法 判断,循环,分支 if ,while/for , switch
[] 中间判断用.表示test
do表示范围

done

shell没有for()这种用法。

perl  
()中间判断 
全是{}表示范围


文件读取;
perl 
$a=<$fd>;按行读取
@a=<$fd>;全部读取


shell中没有open。所以没有句柄
只能用while read但是只能一行一行地读 
while read line
do
    prnt $line
done<1.txt


perl
while (<>) {
print $_;
}


钻石操作符
shell 没有钻石操作符.<>极少见,>写,<读,用于重定向
perl用钻石操作符读取文件


shell没有pop,push,shift,unshift


字符串连接
shell 字符串连接不用,直接写,or用""整体括起来 
cwd=$cwd/email.txt
perl 需要用.连接
$cwd=$cwd.email.txt 


perl退出程序
exit 1
退出子函数
return 1
shell 退出程序和子函数都是
return 1和exit 1  均可


perl
用chomp控制回车
shell
printf可以实现不加
print ,echo 自动加
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。