将变量从php传递到bash

将变量从php传递到bash,php,html,bash,Php,Html,Bash,我有一个小PHP文件,它从一个网页获取输入,并将这些变量传递给一个bash脚本,该脚本在服务器上运行。 从HTML到PHP的输入工作正常,bash脚本在自己运行时也工作正常。如果我将bash脚本改为写入一个同样有效的文件,那么将变量放入命令似乎失败了 PHP 从PHP脚本: $addr = shell_exec("sudo /var/www/html/chngpass.sh $USERNAME $PASSWORD $NEWPASS 2>&1"); 您正在按“用户名”、“密码”、“

我有一个小PHP文件,它从一个网页获取输入,并将这些变量传递给一个bash脚本,该脚本在服务器上运行。 从HTML到PHP的输入工作正常,bash脚本在自己运行时也工作正常。如果我将bash脚本改为写入一个同样有效的文件,那么将变量放入命令似乎失败了

PHP

从PHP脚本:

$addr = shell_exec("sudo /var/www/html/chngpass.sh $USERNAME $PASSWORD $NEWPASS 2>&1");
您正在按“用户名”、“密码”、“新密码”的顺序传递参数,下面是您的bash脚本:

PASSWORD=$1
NEWPASS=$2
USERNAME=$3

echo -e "$NEWPASS\n$NEWPASS" | passwd $USERNAME

if [ $? -eq 0 ]; then
        echo "SUCCESS"
fi
USERNAME=$1
PASSWORD=$2
NEWPASS=$3        

echo -e "$NEWPASS\n$NEWPASS" | passwd $USERNAME

if [ $? -eq 0 ]; then
    echo "SUCCESS"
fi
  • 参数1(用户名)被分配给密码
  • 参数2(密码)被分配给NEWPASS
  • 参数3(NEWPASS)被分配给用户名
修复bash脚本:

PASSWORD=$1
NEWPASS=$2
USERNAME=$3

echo -e "$NEWPASS\n$NEWPASS" | passwd $USERNAME

if [ $? -eq 0 ]; then
        echo "SUCCESS"
fi
USERNAME=$1
PASSWORD=$2
NEWPASS=$3        

echo -e "$NEWPASS\n$NEWPASS" | passwd $USERNAME

if [ $? -eq 0 ]; then
    echo "SUCCESS"
fi

每当你的脚本被修复时,任何有权访问此表单的人都可以更改根密码,这似乎是错误的。在sh文件的开头添加Bash shebang会有帮助吗?我认为要么你这样做,要么用sh.@Lou-Won运行命令;他们还必须输入根密码吗?可能是重复的点,但这只是在测试环境中,只有管理员有权访问。是的。顺序似乎是可变的。很好,我自己也做了,谢谢你的提醒。仍在努力将任何变量传递给passwd?当您从CLI运行bash脚本时,它能工作吗?@LeeEmmery不要忘记一些字符,例如空格和&必须在变量中转义。您试图更改的用户名或密码中是否有这些内容?无论如何,在PHP中转义变量是个好主意:不要在任何变量中使用特殊字符。如果我将脚本设置为输出到一个txt文件,那么它将捕获html页面中输入的内容。但是我不会将变量传递给passwd命令。但是如果我运行(echo-e“$NEWPASS\n$NEWPASS”| passwd$test),它将很好地更改用户测试的密码。