Perl 组已存在

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

当我运行脚本并输入组id时,它返回到已经存在的组。老实说,我加入什么并不重要,它一直回来,我知道这个团体已经存在了,但我知道这个团体并不存在。有什么建议吗?

问题出在第行:

#!/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` )