2

我是网络编程的新手,我有一个小的 shell 脚本,它基本上给出了两个结果的输出。基本上是在我们的目录中查找用户。

#!/bin/bash
echo -n "Please enter username to lookup: "
read USERNAME
DISPLAYNAME=`ldapsearch -p xxx -LLL -x -w test -h abc.com -D abc -b dc=abc,dc=com sAMAccountName=$USERNAME | grep displayName`

if [ -z "$DISPLAYNAME" ]; then
  echo "No entry found for $USERNAME"
else 
  echo "Entry found for $USERNAME"
fi

寻找可以在浏览器上显示结果的 perl web 代码。

我知道,我会在这里要求太多,但如果有人能给我正确的方向来实现这一目标,我将不胜感激。

谢谢!

4

1 回答 1

1

首先,不要$USERNAME你的 BASH 脚本中使用。$USERNAME是一个包含当前用户名的 BASH 变量。事实上,在 BASH 中使用大写变量通常是个坏主意。大多数 BASH 环境变量都是大写的,这可能会导致混淆。将变量设置为小写是一种很好的做法。

此外,由于我想您想使用 HTML 表单执行此操作,因此您不能从 STDIN 读取 BASH。修改游览脚本以将用户名作为参数:

重击:

#!/bin/bash
user=$1;
DISPLAYNAME=`ldapsearch -p xxx -LLL -x -w test -h abc.com -D abc -b dc=abc,dc=com sAMAccountName=$user | grep displayName`
if [ -z "$DISPLAYNAME" ]; then
  echo "No entry found for $user"
else 
  echo "Entry found for $user"
fi

珀尔:

#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser); 
use strict;
use warnings;
## Create a new CGI object
my $cgi = new CGI;
## Collect the value of 'user_name' submitted by the webpage
my $name=$cgi->param('user_name');

## Run a system command, your display_name.sh,
## and save the result in $result
my $result=`./display_name.sh $name`;

## Print the HTML header
print header;
## Print the result
print "$result<BR>";

HTML:

<html>
<body>
<form ACTION="./cgi-bin/display_name.pl" METHOD="post">
<INPUT TYPE="submit" VALUE="Submit"></a>
<INPUT TYPE="text" NAME="user_name"></a>
</form>
</body>
</html>

这应该做你需要的。它假定这两个脚本都在./cgi-bin/您的网页目录中,分别称为 display_name.sh 和 display_name.pl。它还假设您已经正确设置了它们的权限(它们需要由 apache2 的用户 www-data 执行)。最后,它假定您已设置 apache2 以允许执行 ./cgi-bin 中的脚本。

您是否有特定的原因要使用 BASH?您可以直接从 Perl 脚本执行所有操作:

#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser); 
use strict;
use warnings;
## Create a new CGI object
my $cgi = new CGI;
## Collect the value of 'name' submitted by the webpage
my $name=$cgi->param('user_name');

## Run the ldapsearch system command
## and save the result in $result
my $result=`ldapsearch -p xxx -LLL -x -w test -h abc.com -D abc -b dc=abc,dc=com sAMAccountName=$name | grep displayName`;

## Print the HTML header
print header;
## Print the result
$result ? 
      print "Entry found for $name<BR>" : 
      print "No entry found for $name<BR>";
于 2012-09-26T13:13:05.150 回答