我是网络编程的新手,我有一个小的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代码。
我知道,我会在这里问太多,但如果有人能给我正确的方向来实现这一目标,我将非常感激。
谢谢!
答案 0 :(得分:1)
首先,在您的BASH脚本中执行不使用$USERNAME
。 $USERNAME
是一个BASH变量,包含当前用户的名称。实际上,在BASH中使用UPPERCASE变量通常是个坏主意。大多数BASH环境变量都是大写的,这可能导致混淆。将变量设置为小写是一种好习惯。
此外,由于我想你想用HTML表单来做这件事,你不能从STDIN读取BASH。修改游览脚本以将用户名作为参数:
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
的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 '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>";