免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 606 | 回复: 0
打印 上一主题 下一主题

Unix/Linux平台的自动化(三) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-05 09:58 |只看该作者 |倒序浏览
  11.3 Perl
   
  Perl是从awk发展起来的,它由Larry Wall在1986年发明。它是一种功能强大的编程
语言,而且可以在许多平台上使用。实际上,你完全可以将Perl作为一种标准编程语言( 不是脚本语言)来使用,笔者非常喜欢它,并且建议所有不想学习C
语言的UNIX管理员应该掌握Perl的基本编程技术。目前,常用的版本是perl 5,几乎所有的Linux发行版本都会包含它,缺省时,linux的
perl 5安装在/usr/bin下,命令是/usr/bin/perl.
11.3.1 基本语法

   
  perl的语法介于C和basic之间,一个perl程序由若干行组成,使用的时候由perl解释程序解释执行。每个完整的行都应该用分号结尾。
   
  Perl的基本语法是这样的:
   
  ① 变量和运算符
   
  在perl中,所有变量都不需要提前声明。一旦对某个变量赋值,就自动产生了这个变量。perl的变量有普通变量,数组和关联数组三种。普通变量就是数值和字符串,要声明一个普通变量,在变量名字前面加上$,例如
   
  $string1="aaa";
   
  $test=5;
   
  $u=1.33;
   
  同样,访问变量内容也需要使用$符号。

   
  数组用@字符标志,如
   
  @name1=("tom","marry","john");
   
  $b=$name[0]; $b现在等于"tom"
   
  $b=@name[0];跟上一句是一样的
   
  $name[0,2]=["help","so"];现在@name等于[“help","marry","so"]
   
  @name[0,2]==@name[2,0];交换0,2元素
   
  数组的大小不是固定的,你可以动态地添加数组元素,例如
   
  $name[3]="app";增加一个元素
   
  直接访问数组名字将得到数组中元素的个数,例如:
   
  $count=@name;将name的元素个数存放到$count变量中。

   
  关联数组是一种特殊的数组,每个元素都由一对元素构成。或者说,关联数组是一种下标不是整数的数组,要声明一个关联数组,使用%符号,例如:
   
  %arr=(1,"one",2,"two",3,"three",4,"four");
   
  这时可以用前面的值(key)来索引后面的值:
   
  $one=$arr{1};这时$one等于"one"
   
  注意关联数组的访问方式,是使用$关联数组名字[索引号]。
   
  你可以把关联数组看成数据库的一种实现。与一般的数组一样,其大小也可以动态调节:
   
  $arr{5}="five";增加一对数据。
   
  可以将关联数组简单地变成普通数组,例如
   
  @X=%arr;现在@X的内容是X[0]="1",X[1]="one",……………
   
  perl的运算符与C语言以及我们介绍的gawk很相似,包括普通的+-*/%以及来自C语言的逻辑运算符&&(和),||(或),等等,下面是一个列表:
   
   + - * /     四则运算,注意perl的除法是浮点除法
   
  $a % $b     a对b取余数,例如3%2的结果是1
   
  $1 .. $2    区段运算符,这个算符取出$1和$2中间的所有值,例如1..9返回一个表
1,2,………9。通常用这个命令初始化一个数组,例如:@dec=1..9;@oth=(1..26,'A'..'Z')等等。
   
  =     赋值算符
   
  >   = $filename")。想要在某个文件的后面追加内容,使用open(Filehandle,">>$
filename")。当然,open(Filehandle,";从句柄FILE指向的文件中读取一行,内容存入$filecontent变量。如果你要从控制台读取一个字符串,使用$input=;就可以了。
   
  下面是一个例子:
   
  $filename="test";
   
  open (FILE,"$filename")||die "can not open file!;
   
  while($line={
   
  print "$line";
   
}
   
  close(FILE);
   
  
这个程序实际就是cat命令的perl语言实现,open命令打开当前目录下面的test文件,并且把句柄返回到FILE变量,注意这一行的用法,
Perl的||(或)运算是短路求值的,如果open成功,那么返回一个非0的数,因此这算式无论如何都会为真,所以会跳过||后面的东西;否则,如果
open失败,perl就要对后面的东西执行一下,于是退出这个程序。
   
  打开成功之后,perl会得到这个文件的句柄,下面的句子就是反复读取文件的每一行并且显示出来,当文件读到末尾的时候,$line=将产生一个空字符串,于是while循环结束。
   
  与shell脚本语言类似,perl还有一些文件测试运算符

   
  -t $file  

   
  如果$file这个文件可读,返回1,$file是文件名。

   
  -w $file  

   
  如果$file可写,返回1

   
  -x $file  

   
  如果$file可以执行,返回1

   
  -e $file  

   
  如果$file存在,返回1

   
  -o $file  

   
  如果用户是$file的拥有者,返回1

   
  -s $file  

   
  返回$file文件的大小

   
  -f $file  

   
  是否为正常文件

   
  -T $file  

   
  是否文本

   
  -B $file  

   
  是否二进制文件

   
  -M $file  

   
  文件从更新到现在的日期数

   
  ④流程控制

   
  perl支持与C语言很相似的流程控制语句:

   
  if和if..else:
   
  if语句的语法是
   
  if(...){
   
  clause;
   
}
与C语言不同,即使只有一行程序,if后面的花括号也不能省略,这一点也适用于后面说的其他复合语句。
   
  与C语言类似,也可以用else和elseif子句:
   
  if(...){
   
  clause1;}
   
  else {
   
  clause2;
   
}
   
  或者
   
  if (…){
   
  ...
   
}
   
  elseif(…){
   
  ....
   
}
   
  else{
   
  ...
   
}
   
  另外,perl还支持unless语句:
   
  unless(exp1){
   
  clause1;
   
}
   
  如果exp1不成立,就执行clause1子句。这个unless语句里面也可以使用else子句。实际上,这就是一种否定形式的if……else语句。

               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12973/showart_374510.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP