【问题标题】:How to pass textbox value to bash script如何将文本框值传递给 bash 脚本
【发布时间】:2013-12-18 12:08:12
【问题描述】:

这是我的第一个问题,CMIIW:

这里是我的示例 php 脚本

<form method="GET" action="/var/www/cgi-bin/mode2.sh">
     <table align="center" nowrap>
<tr>><td>IP address :</TD><TD><input type="text" name="ip"></td></tr>
<tr><td>netmask :</TD><TD><input type="text" name="ip2"></td></tr>
</tr></table>

 <input type="submit" value="Send">
 <input type="reset" value="Reset"></p></form>

bash 脚本:

#!/bin/bash -x

echo "IPADDR=$ip"       >>/etc/sysconfig/network-scripts/ifcfg-eth0
echo "NETMASK=$ip2"     >>/etc/sysconfig/network-scripts/ifcfg-eth0

我想从 Web 浏览器输入文本框值,例如 IP 和网络掩码,然后将值发送到 bash 并保存到 ifcfg-eth0 文件。我知道这听起来很冒险,我只是想学习。有什么建议吗?

【问题讨论】:

  • 这不会像这样工作,至少您需要将action 属性设置为网络服务器可访问的路径,在您的情况下可能是:/cgi-bin/mode2.sh .然后网络服务器可能只会将mode2.sh 显示为文本文件,除非您有一些特殊配置允许网络服务器执行 shell 脚本。
  • 我的示例 php,我剪切了我的脚本。有什么帮助吗?

标签: php bash shell cgi


【解决方案1】:

不要让action属性指向你要运行的shell脚本,而是让action属性指向php文件,比如

<form method="GET" action="UserInputIPAddrPHP.php">

在 UserInputIPAddrPHP.php 中,您可以获取用户输入的 IP 和网络掩码,如下所示

<html>
<body>
<?php
$IP_Addr = $_GET['ip'];
$NetMask = $_GET['ip2'];
$command="/path/to/mode2.sh ".escapeshellarg($IP_Addr)." ".escapeshellarg($NetMask);
exec ($command,$output=array(),$return_value);
if($return_value!==0) {
    #print appropriate message
}

?>
</body>
</html>

$command 是您键入以在 shell 中运行脚本的实际命令。所以相应地设置它。

像这样编写你的脚本 mode2.sh(注意引号):

#!/bin/sh
command "$1" "$2"; # command is actual command you want to run like cp,mv etc

使其可执行:

me@somewhere$ chmod +x mode2.sh

希望对你有帮助

谢谢

【讨论】:

  • 我已尝试按照您的步骤进行操作,但仍无法将值发送到 bash。 UserInputIPAddrPHP.php 脚本:$sh="/path/to/mode2.sh ".escapeshellarg($IP_Addr)." ".escapeshellarg($NetMask); exec ($sh,$output=array(),$return_value); bash 脚本:echo =echo "IPADDR=$1" &gt;&gt;/etc/sysconfig/network-scripts/ifcfg-eth0 echo "NETMASK=$2" &gt;&gt;/etc/sysconfig/network-scripts/ifcfg-eth0
  • @Haruru 请找到以下脚本将用户输入(IP、网络掩码)重定向到文件 /etc/sysconfig/network-scripts/ifcfg-eth0 IP="$1";网络掩码="$2"; echo "$IP" >>/etc/sysconfig/network-scripts/ifcfg-eth0 echo "$NetMask" >>/etc/sysconfig/network-scripts/ifcfg-eth0 希望对你有帮助 谢谢
  • 还尝试在发送到 bash 脚本之前打印变量的值,即打印 $IP 和 $Netmask
  • @Haruru Alwys 欢迎您。任何帮助请告诉我
【解决方案2】:

你不应该使用 bash 作为 cgi 脚本。 但是如果真的有需要,可以通过操作变量$QUERY_STRING获取IP和网络掩码

#!/bin/bash
echo Content-type:text/plain
echo ""

read IP MASK <<< $(echo $QUERY_STRING |  sed -r 's/&?ip2?=/ /g')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2015-12-19
    • 1970-01-01
    相关资源
    最近更新 更多