首先,不要在$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>";