Perl 组已存在
当我运行脚本并输入组id时,它返回到已经存在的组。老实说,我加入什么并不重要,它一直回来,我知道这个团体已经存在了,但我知道这个团体并不存在。有什么建议吗?问题出在第行:Perl 组已存在,perl,Perl,当我运行脚本并输入组id时,它返回到已经存在的组。老实说,我加入什么并不重要,它一直回来,我知道这个团体已经存在了,但我知道这个团体并不存在。有什么建议吗?问题出在第行: #!/usr/bin/perl use strict; use warnings; my $group_name = <STDIN>; my $group_id = <STDIN>; my $choice = <STDIN>; print "* My menu *\n"; pr
#!/usr/bin/perl
use strict;
use warnings;
my $group_name = <STDIN>;
my $group_id = <STDIN>;
my $choice = <STDIN>;
print "* My menu *\n";
print "* *\n";
print "* 1. Create a Unix Group *\n";
print "* 2. Delete a Unix Group *\n";
print "* 3. Create a Unix User *\n";
print "* 4. Delete a Unix USer *\n";
print "* 5. Quit *\n";
print "* *\n";
print "******************************************************\n";
print "* Enter Your Choice >\n";
$choice = <STDIN> ;
chomp $choice;
if ($choice == 1) {
print "**********************************\n";
print " Create A Unix Group\n";
print "**********************************\n";
print " Enter The Group Name to Create >\n";
chomp ($group_name = <STDIN>);
print " Enter the Group ID to Create >\n";
chomp ($group_id = <STDIN> );
if ( ! 'grep -i $group_name /etc/group' ) {
system ("groupadd -g $group_id $group_name");
print "Group Created Successfully!\n"
} else {
print "Group Already Exists !\n";
}
}
这里使用引号“…”,因此perl将其视为文字字符串。布尔上下文中不为null的字符串将被提升为true,因此如果条件始终失败,则执行else分支
要从perl运行系统命令,必须使用backsticks`……`或使用系统内置函数:
if ( ! 'grep -i $group_name /etc/group' )
它工作了,但是为什么我会收到这个错误4567不能执行groupadd:在./Menu3.pl第34行,第6行没有这样的文件或目录。组创建成功!将groupadd-g$group\u id$group\u name更改为/bin/groupadd-g$group\u id$group\u name或/usr/bin/groupadd-g$group\u id$group\u name,错误可能会消失。gnouc下面的答案是正确的。我建议的一个改进是将grep-I$group\u name/etc/group行更改为grep$group\u name:/etc/group。使用-i选项,您将在任何情况下匹配组,这可能不是您的意图。通过添加冒号,可以停止匹配所需组是其子字符串的组。例如,如果要添加组邮件,并且组邮件程序已经存在,则当前的脚本将不允许添加组邮件。我的建议将停止这类问题。
if ( ! `grep -i $group_name /etc/group` )