如何运行Perl和powershell 查看帮助助

第二十七章 Introduction to Perl
Programming(中文版)
Perl 是一种脚本语言,它在每次运行前都需要编译。在unix/linux下,通常perl脚本都是以 #!/usr/bin/perl
为开头的。这其实是perl(可执行文件)的全局路径,这个路径当然可以写成其他,只要能找到perl,
但有一点需要注意,perl的全局路径(/usr/bin/perl)不能超过32个字符。
Perl的内容和命令行
Perl路径给出后: #!/usr/bin/perl 接下来就该写perl脚本实际
内容了,你可以什么都不写,也可以写点注释语句,当然最应该写的就是命令行了。通常,注释行都是
以"#" 开头的,内容任意,反正在perl脚本中不会被运行。命
令行是以非空格字符开始并且以";"结束的。所以,你可以在把一条命令
写成多行,而直到你给出分号时结束。
直接命令行和子程序(函数)
普通命令行在perl脚本中是由上及下一行一行执行的。然而,子程序可以放到任何地方,只有被调用时才会被执行
。子程序是什么样子的呢?如果你看到一段代码以"sub"开头,并且格式是这样的:sub name {} , 那
么这就是子程序了。
其他特殊行
Perl 可以包含其他程序的代码,但需要这样的格式:require
something 或者 use something.
单引号: '' 或者: q//
双引号: "" 或者: qq//
引用执行结果:`` 或者: qx//
引用几个词组: ('term1','term2','term3')
或者: qw/term1 term2 term3/
引用一个被引用的字符串: qq/"$name" is $name/;
引用包含 "/": qq!/usr/bin/$file
is readdy!;
标量上下文和列表上下文
在Perl中,标量上下文和列表上下文是有区别的,这是Perl脚本语言的一个亮点,这个特性在众多脚本语言当中是
独一无二的,也是非常实用的。
在Perl的子程序中,不仅可以返回一个列表类似于C中的标量,而且还可以返回一个数组,这个数组不仅可
以给出标量上下文中元素的个数还可以给出列表上下文中元素本身。
Perl该特性的巨大价值应该是显而易见的。
变量和运算符
Perl的变量包含很多内容:标量变量、一维数组、二维数组以及关联数组。你可以通过特殊字符来声明Perl的变量
是标量还是数组,如$variable
表示普通的标量变量;
@variable 表示数组;
表示关联数组。 在Perl中,你不需要去区分变量中的字符串和数字,因为Perl可以自动识别它们。
赋值变量: $price = 300; $name = "JOHN";
变量的计算: $price *= 2; $price
= $oldprice * 4; $count++; $worth--; 输出变量的值: print
$price,"\n";
赋值数组: $arr[0] = "Fred"; $arr[1] = "John";
输出数组: print join(' ',@arr),"\n";
二维数组: $arr[0][0] = 5; $arr[0][1]
哈希(关联数组)
赋值单一元素的哈希: $hash{'fred'} =
"USA"; $hash{'john'} = "CANADA";
赋值完整哈希:
&&& 'r1',& 'this is val of r1',
&&& 'r2',& 'this is val of r2',
&&& 'r3',& 'this is val of r3',
&&& r1 => 'this is val of r1',
&&& r2 => 'this is val of r2',
&&& r3 => 'this is val of r3',
"="可以把一个值赋给一个变量,或者其他和
"="组合的操作符在赋值的同时也可以做其他操作。
$var = "string";
把string赋予$var
把数字赋值给$var
$var .= "string";
$var 后面加string
$var += 5;$var加5
$var *= 5; $var乘以5
$var ||= 5; 如果 $var 为 0 则$var的值为 5
$var x= 3;
使$var重复3次,如 $var 原来为a,则现在
替换和赋值:
($new = $old) =~ s/pattern/replacement/;
字符串的比较: eq ne 如
in: $name eq "mary".
数字的比较: == != >= &= &=>
如: $price == 400.
And/Or/Not
评估成功或者失败的表达式: $yes
意思是,如果$yes 没有定义那么脚本会 exit.
AND 我们可以写成: && 或者
而OR 我们可以写成: || 或者"or".
Not写成 "!"或者 "not".
And, Or 和 Not 一般用于 if() 语句中:
if($first && $second){....;}
if($first || $second){....;}
if($first && ! $second{....;}
这个表示,如果$first 为真,并且$second为假,才会执行{}内的语句。
但大多时候,我们会用unless()语句去替代Not,这样看起来更容易懂:
print if ! $ one uses: print
if(condition){
}elsif(condition){
如果满足 condition, 那么会执行
unless (和if相反)
unless(condition){
&&& command1;
&&& command2;
只有满足了condition才会执行command2, 否则执行command1;
while(condition){
# 这里的next if表示,当condition2为假时,才会执行
while(condition1){
&&& command1;
&&& next if condition2;
&&& command2;
# 当满足last condition时会退出循环
while(condition){
# 如果满足condition1 则会执行command1, 同时满足
condition2时会进一步执行command2,每执行一次while循环都会执行command3
while(condition1){
&&& command1;
&&& continue if condition2;
&&& command2;
}continue{
&&& command3;
# 当满足condition1时,执行command,当同时满足condition1
以及condition2时,再次执行command
while(condtion1){
&&& redo if condition2;
until (和while正好想反)
until(condition){
until(condition){
until(condition){
until(condition){
}continue{
for (=foreach)
# 迭代@data,输出每个 $_的值
for(@data){
&&& print $_,"\n";
# 把@data的值赋予$info
for $info (@data){
&&& print $info,"\n";
#输出1到100中的奇数
for $num (1..100){
&&& next if $num % 2;
&&& print $num,"\n";
(;;),表示为真。当$num>100时就停止循环
&&& $num++;
&&& last if $num > 100;
map (command,list);
map {comm1;comm2;comm3;}
map (rename($_,lc($_),&*>);
文件检测操作
用来检测文档的状态,如下:
是否是普通文件
是否是目录
是否是可读
是否可执行
当前用户是否为该文件的所属主
文件是否为链接
文件是否存在
文件存在,检测大小是否为0
文件大小大于0
-t FILEHANDLE
该文件句柄是连接到某一个tty的
文件是否是文本的文档
文件是否是二进制文档
距最后一次更改多长时间
正则表达式
什么是正则表达式
正则表达式是用某种模式去匹配字符串的一个公式。通常情况下,你可以通过搜索模式来找到匹配的字符串,也可
以把匹配的字符串给替换为你想要的。
Perl的模式很多,可以是一个或多个字符,也可以是某个或者多个特殊字符,当然还可以是任意字符或者无任何字
符。总之,Perl的模式匹配是非常精准、抽象以及灵活的。
任意一个字符
任意个(包含0)任意字符
the maximum of consecutive a's
the minimum of consecutive a's
一个或者无任意字符
一个或者多个任意字符
3到7个任意字符,尽量多
3到7个任意字符,尽量少
至少3个任意字符
3次任意字符
不是a并且也不是b
任意一个小写字母
a或者bb或者CCC
tele(f|ph)one
telefone 或者 telephone
大小写字母或下划线_
除大小写字母和下划线的任意字符
0-9 任意一个数字
除数字之外的所有字符
空格或者tab、换行以及其他空白字符
除上面的以外
carridge return (翻译不通)
以英文字母,数字为边界的字符串
matches key but not housekey
(?#.......)
区分大小写,可以是内部模式变量
a 或者 b 或者 c, 但在$n 中不存在字符
包含..... 但不会存储在$&
不包含..... 但不会存储在$&
你可以使用这样的语句 s/pattern/replacement/把匹配到的
东西给替换。注释:
这里的"s"表示命令,然后紧跟着三个分隔符(斜杠),前两个斜杠中的内容就是要匹配的内容,后两个斜
杠中的内容则为要替换为的内容。
可以这样更换一个变量的内容: $var =~
s/pattern/replacement/;
修改一个变量的内容,并把修改后的变量赋值给另外一个变量:
($name = $line) =~ s/^(\w+).*$/$1/;
替换第一个出现的A为B
替换所有A为B
替换1个或多个A为单一的A
删除所有以#为开头的字符串
在字符串最前增加一个#
s/A(\d+)/B$1/g;
A后边是一连串数字,把A替换为B
s/(\d+)/$1*3/e;
把一连串数字后边再重复两遍该连串的数字
使用 -e 可以直接在linux命令行中运行perl语句:
perl -e '$aa = 4; $bb = '$aa';
$bb =~ s/(\$\w+)/$1/ print $bb,"\n";'
s/here goes date/$date/g;
把 "here goes date" 替换成 $date
s/(Masumi) (Nakatomi)/$2 $1/g;
把两个字符串的位置互换
s/\000//g;
把空字符串移除
s/$/\033/;
在每行后加一个^M,使其在dos下可读
输出一个变量的值
print $var,"\n";
输出格式化的字符串
printf("%-20s%10d",$user,$wage);
把输入的值赋值给变量,并删除新行
chomp()(perl5)会删除\n以及后面的所有内容。chop()(perl4)会删除最后一个字符,而不管这个字符是什么.
chomp($var = &STDIN>);
流线性读入一个文件
open(IN,"&filename") || die "Cannot open filename for input
while(&IN>){
把读入的文件赋值给数组
open(AAA,"&infile") || die "Cannot open infile\n";
@bigarray = &AAA>;
close AAA;
把输出的结果重定向到文件中
open(OUT,">file") || die "Cannot oben file for output\n";
while(condition){
&&& print OUT $
close OUT;
检测打开文件是否会输出信息(eof)
open(IN,"&file") || die "Cannot open file\n";
if(eof(IN)){
&&& print "File is empty\n";
&&& while(&IN>){
命令行中提及程序的名字
空文件句柄“”能够迭代性的读取文件,当前程序的文件名可通过$ARGV得到。如下,可以在诸多行的行头加
while(&>){
&&& $file = $ARGV;
&&& print $file,"\t",$_;
&&& open(IN,"&$file") or warn "Cannot open $file\n";
&&& ....commands for this file....
&&& close(IN);
得到文件名
得知当前目录
@dir = &*>;
迭代性的使用当前目录
while(&*>){
&&& ...commands...
通过选择文件
@files = &/longpath/*.c>;
通过glob()选择文件
This is the official way of globbing:
@files = glob("$mypatch/*$suffix");
Perl即使不使用globbing shell也是可以得到目录的,并且既快速又可控,但是我们必须要使用opendir()以及
closedir().
opendir(DIR,".") or die "Cannot open dir.\n";
while(readdir DIR){
&&& rename $_,lc($_);&
closedir(DIR);
Unix命令的输入、输出的重定向
通过Unix管道得到程序要使用的数据
open(IN,"unixcommand|") || die "Could not execute
unixcommand\n";
while(&IN>){
把输出的数据给Unix管道
open(OUT,"|more") || die "Could not open the pipe to more\n";
for $name (@names){
&&& $length = length($name);
&&& print OUT "The name $name consists of $lenght characters\n";
close OUT;
执行Unix命令
如果输出信息只有一行字符串
system("someprog -auexe -fv $filename");
执行Unix命令,并且把输出值赋给变量
如果输出信息只有一行字符串:
chomp($date = qx!/usr/bin/date!); The
chomp($date = qx!/usr/bin/date!);
chomp()(perl5)把字符串后边的换行符“\n”去掉,$date得到Unix命令
"date"的值.
如果输出信息是多行,那么Perl会把所有输出信息存到数组中:
chomp(@alllines = qx!/usr/bin/who!);
替换整个Perl程序为一个Unix程序
但是这样会删除掉Perl程序
Perl内置函数
字符串函数
所有小写变大小:&
$name = uc($name);
只把第一个字母变大写:&
$name = ucfirst($name);
所有大写变小写:&
$name = lc($name);
只把第一个字母变小写:&
$name = lcfirst($name);
得到字符串的长度:
$size = length($string);
截取字符串的第4到第5:
$part = substr($whole,4,5);
删除行尾(一般是删除换行符以及下面内容):
chomp($var);
删除最后一个字符:
chop($var);
拷贝(把$word的值拷贝给$salt):
$code = crypt($word,$salt);
把字符串当作perl代码来执行:
打印字符(substring)在字符串(string)的什么位置:
$pos = index($string,$substring);
最后面的substring在string的什么位置:
$pos = rindex($string,$substring);
引用字符串:
$quote = quotemeta($string);
和Unix中的grep类似,过滤出符合要求的元素:
@found = grep(/[Jj]ohn/,@users);
把数组各元素作为操作对象,本例中把每个元素所有字母都变为大写:
@new = map(lc($_),@start);
把数组中的所有元素组合成一个字符串,元素间用函数给定的分隔符分割,本例中分隔符为空格:
$string = join(' ',@arr);
把一个字符串分割成一个数组:
@data = split(/&/,$ENV{'QUERY_STRING'};
按字母顺序排序数组:
sort(@salery);
将数组的次序颠倒:
reverse(@salery);
获取哈希的键:
keys(%hash);
获取哈希的值:
values(%hash);
获取哈希的键和值:
each(%hash);
清空数组:
@arr = ();
删除哈希中的某个元素:
delete $hash{$key};
检查哈希的某个键是否存在:
if(exists $hash{$key}){;}
查看哈希是否有元素:
把数组最后一个元素取出来并返回其值:
$last = pop(@IQ_list);
把数组第一个元素取出来并返回其值:
$first = shift(@topguy);
在数组最后增加一个元素:
push(@waiting,$name);
在数组最前面增加一个元素:
unshift(@nowait,$name);
把数组从第0个元素起,共2个元素替换为$var,这里的0和2不是固定的:
splice(@arr,0,2,$var);
得到数组总共有多少个元素:
得到数组最后一个索引:
$lastindex = $#
操作文件的函数
打开文件作为输入内容:
open(IN,"&/path/file") || die "Cannot open
打开文件作为输出内容:
open(OUT,">/path/file") || die "Cannot open
打开文件作为追加内容:
open(OUT,">>$file") || &myerr("Couldn't
open $file");
关闭文件:
close OUT;
给文件设置权限:
chmod 0755, $
删除文件:
给文件重命名:
rename $file, $
给文件做硬链接:
link $existing_file, $link_
给文件做软链接:
symlink $existing_file, $link_
创建目录:
mkdir $dirname, 0755;
删除目录:
把$file的大小减小到$size:
truncate $file, $
修改文件的所属主以及所属组:
chown $uid, $
找到软链接文件的源文件:
$file = readlink $
获取文件的全部属性信息:
@stat = stat $
数字变字符:
字符变数字:
ord($char);
十六进制变浮点:
hex(0x4F);
八进制变浮点:
oct(0700);
把time变成本地时间格式:
localtime(time);
把time变成格林威治格式:
gmtime(time);
把一个列表或数组以在实际机器存贮格式或C等编程语言使用的格式转化到一个简单变量中:
$string = pack("C4",split(/\./,$IP));
与pack功能相反,将以机器格式存贮的值转化成Perl中值的列表:
@arr = unpack("C4",$string);
子程序(等同于C语言中的函数)
定义一个子程序
sub mysub {
sub myerr {
&&& print "The following error occured:\n";
&&& print $_[0],"\n";
&&& exit(1);
调用一个子程序
给子程序参数
&mysub(@data);
在子程式中接收参数
作为全局变量:
sub mysub {
&&& @myarr = @_;
sub mysub {
&&& ($dat1,$dat2,$dat3) = @_;
作为局部变量:
sub mysub {
&&& local($dat1,$dat2,$dat3) = @_;
一些特殊的变量
在(@arr){ $field = $_ . " ok"; }
这个例子中,$_表示循环中的字符串
表示当前程序的行号: while(){
运行该perl脚本的进程号
当前程序的真实uid
当前程序有效的uid
该变量默认为0,当设定为非0时,会强制刷新输出: select XXX; $| = 1;
最后一次匹配模式匹配到的字符串
The ()-embraced matches of the last patternsearch
含有上次成功的模式匹配内容之前的字符串
含有上次成功的模式匹配内容之后的字符串
派生很简单,通常我们会以三种方式区分派生 if(){} ,分别是父、子 和 错误。
if($pid = fork){
}elsif($pid == 0){
&&& # 子必须以exit为结尾!!
&&& # 错误
&&& die "Fork did not work\n";
为派生的子创建管道
创建一个管道
pipe(READHANDLE,WRITEHANDLE);
select(WRITEHANDLE); $| = 1; select
在父与子之间设置两个管道
pipe(FROMCHILD,TOCHILD);& select(TOCHILD); $| = 1;
select(STDOUT);
pipe(FROMPARENT,TOPARENT);select(TOPARENT);$| = 1; select(STDOUT);
if($pid = fork){
&&& close FROMPARENT;
&&& close TOPARENT;
}elsif($pid == 0){
&&& close FROMCHILD;
&&& close TOCHILD;
&&& # 错误
创建一个套接字来连接另外的计算机
# 需要放置在脚本开始的一些地方
require 5.002;
# 需要提前设置好的一些信息
$port&& = 80;
$remote = 'remotehost.domain';
$iaddr& = inet_aton($remote);
$paddr& = sockaddr_in($port,$iaddr);
socket(S,AF_INET,SOCK_STREAM,$proto) or die $!;
# 刷新套接字
select(S); $| = 1; select(STDOUT);
connect(S,$paddr) or die $!;
# 输入到套接字
print S "something\n";
从套接字中读取
$gotit = &S>;
#只读出一个字符
read(S,$char,1);
# 关闭套接字
获取Unix用户以及网络相关信息
获取指定用户的密码: @entry
= getpwnam("$user");
或者通过指定uid的方式获取用户的密码: @entry = getpwuid
你也可以得到group, host, network, services, protocols这些信息通过以下命令: getgrnam, getgrid, gethostbyname,
gethostbyaddr, getnetbyname, getnetbyaddr, getservbyname, getservbyport,
getprotobyname, getprotobynumber.
你还可以通过如下方式,获取一系列你想得到的信息,只不过你需要一个循环而已:
while(@he = getpwent){
commands...
如,你想要得到一些用户的家目录:
while(@he = getpwent){
&&& printf("%-20s%-30s\n",$he[0],$he[7]);
类似的,该方法同样适用于上面刚刚描述的那些东西,只不过需要在设置命令后面加上一个"stayopen" .
返回e的n次方,()内为n exp()
平方根: sqrt()
绝对值: abs()
Tangens: atan2()
Sinus: sin()
Cosine: cos()
返回一个随机数: rand()
使用“format”格式化输出
这个要比printf要简单,首先需要在程序显眼的地方定义一下格式,然后就可以使用这个定义好的格式了:
format filehandle =
@&&&&&&&&&&@###.#####@>>>>>>>>>>@||||||||||
$var1, $var3, $var4
现在可以使用上面定义的输出格式了:
write FILEHANDLE;
The @&&& does left adjustment, the
@>>> right adjustment, @##.##
is for numericals and @||| centers.
命令行下使用Perl
输出Perl的版本号:
检查perl脚本语法是否正确而不运行:
perl -wc &file>;
命令行下直接执行perl语句:
perl -e 'command';
循环读取文件,并输出到标准输出:
perl -pe 'command' &file>;
循环读取文件,并输出到标准输出:
perl -lpe 'command' &file>;
在文件中直接就地修改:
perl -i -pe 'command' &file>;
该选项将会以空格分割输入,并把分割结果存放到@F中:
perl -a -e 'print if $F[3] =~ /ETH/;' &file>;
循环读入文件,但不是输入:
perl -ne 'command' &file>;Perl快速入门教程_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Perl快速入门教程
上传于|0|0|文档简介
&&Perl快速入门教程
Perl工具书
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩21页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 12, 距离下一级还需 188 积分
论坛徽章:0
请问大家一般是怎么做接收 -help 的参数,来让我们的程序显示一些帮助信息?
我是这样做的:
($first, $second) = @ARGV;
if ($first =~ m/-help/)& && & #help documents
& & & & { print &this is a help document!\n&; }
但是在程序里面,用perl test.pl --help 就能显示this is a help document!,
& && && && && && && &而用perl test.pl -help 就不行。
--help 和 -help 有区别么?
, , , , , , ,
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
论坛徽章:1
cpan Getopt::Long
楼主是 windows 用户?
白手起家, 积分 12, 距离下一级还需 188 积分
论坛徽章:0
自己顶一下,大家说说想法 :)
白手起家, 积分 12, 距离下一级还需 188 积分
论坛徽章:0
& &&&谢谢flw,
& &&&我确实是windows用户,linux水平未入门。。。。
白手起家, 积分 73, 距离下一级还需 127 积分
论坛徽章:0
Getopt::Std,将全局变量:$Getopt::Std::STANDARD_HELP_VERSION = 1;
以及实现两个子例程:
sub HELP_MESSAGE {
sub VERSION_MESSAGE {
还支持--version。
白手起家, 积分 12, 距离下一级还需 188 积分
论坛徽章:0
& & 谢谢 yigenjin
& & 根据你提供的方法 , 完善了下sample的代码:#!/usr/bin/perl -w
use Getopt::S
%options=();
getopts(&hH:vV&,\%options);
&HELP_MESSAGE if defined $options{h};
&HELP_MESSAGE if defined $options{H};
&VERSION_MESSAGE if defined $options{v};
&VERSION_MESSAGE if defined $options{V};
print &Unprocessed by Getopt::Std:\n& if $ARGV[0];
foreach (@ARGV) {
&&print &$_\n&;
}
sub HELP_MESSAGE {
print &hi this is a help document!\n&;
}
sub VERSION_MESSAGE {
print &version 1.0!\n&;
}复制代码
白手起家, 积分 73, 距离下一级还需 127 积分
论坛徽章:0
humaeks123
# &HELP_MESSAGE if defined $options{h};
# &HELP_MESSAGE if defined $options{H};
# &VERSION_MESSAGE if defined $options{v};
# &VERSION_MESSAGE if defined $options{V};
这四行多余。
按我说的做后,默认--help和--version就调用那俩子例程,不需要你自己添加了。
详情perldoc Getopt::Std看吧,说的很详细。如何在Centos上运行Perl - 如对你有帮助,欢迎微信打赏,不在多少 - ITeye博客
博客分类:
一、检查是否已经安装perl,如果没有安装,进行安装
[qinshiqi@localhost Desktop]$ rpm -q perl
perl-5.10.1-127.el6.x86_64
如果没有安装 ,通过yum -install perl进行安装。
如何安装可参考:
/admin/blogs/2036014
[qinshiqi@localhost Desktop]$ perl -v二、创建一个*.pl文件
在CVS中,如果创建CVS用户 ,可以通过
/admin/blogs/2035529
3、创建登录cvs服务的用户以及密码[root@localhost CVSROOT]# htpasswd -c passwd yfeifeiNew password:Re-type new password:Adding password for user yfeifeid*_****在/home/cvsroot/CVSROOT下运行htpasswd -c passwd yfeifei(-c 会生成passwd文件,以后再创建用户就不需要 -c 参数了,可以使用 -n 参数直接指定用户名,但要在passwd文件中添加对应的用户名称加密密码以及:cvsroot)(创建的feifei用户是以其所在群组为cvs的资格来可读可写可执行仓库中的文件)修改passwd文件,在用户名后边加上cvsroot*************************[root@localhost CVSROOT]# htpasswd passwd qinNew password:Re-type new password:Adding password for user qin[root@localhost CVSROOT]# cat passwdyfeifei:7vV7AcR3pOORk:cvsrootqishi:v8yvvdpJ71L7w:cvsrootqin:9tTPnujUuKP82[root@localhost CVSROOT]#
也可以通过以下perl语言脚本生成用户的密码,直接通过编辑生成passwd的用户列表;
1:创建可以登陆cvs服务的用户及密码,需要创建文件passwd
vi /home/cvsroot/CVSROOT/passwd
文件内容如下:
qin:xxxxx:cvsroot
cvsroot是系统用户,就是把cvs用户qin与系统用户cvsroot等效
2.xxxxxx为密码,由以下文件生成: vi /home/cvsroot/pwdgen.pl 文件内容:
#!/usr/bin/perlsrand (time());my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);my $plaintext = my $crypttext = crypt ($plaintext, $salt);print "${crypttext}\n";
3、生成pwdgen.pl脚本后可以像windows下一样运行 后边“test”是参数
$perl pwdgen.pl "test"
adMpHktIn0tR24、pwdgen.pl 脚本第一句
#!/usr/bin/perl
我们也可以直接给pwdgen.pl赋于可执行权限
chmod +x pwdgen.pl
./pwdgen.pl "some"
5.Hello World
vi hello.pl
print "this is my first perl script\n";print "Hello,world";
*********************************************************************
perl脚本的知识请参考
/huochangjun/archive//Perl.htmlhttp://www.codesky.net/article/554.html
.cn/s/blog_13a11.html
/article/48b37f8d6c41eb1a646488bc.html
浏览: 18505 次
来自: 北京}

我要回帖

更多关于 python 查看帮助 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信