网页从shell脚本中获取输入并显示结果

时间:2012-09-26 05:15:13

标签: bash perl unix cgi

我是网络编程的新手,我有一个小的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代码。

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

谢谢!

1 个答案:

答案 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>";