$command1 = "interfacename -S ipaddress -N nms -P company ";
$command2 = "list search clientclass hardwareaddress Mac address ";
if ( exec( $command1 . "&&" . $command2 ) ) {
echo "successfuly executed";
} else {
echo "Not successfuly executed";
}
如果命令1(cmd查询)成功执行,我希望下一步执行命令2(也包含一些cmd查询)。在上面的脚本中,只执行命令1。它没有显示命令2的任何结果。
我已经浪费了两天没有找到任何解决方案。
答案 0 :(得分:0)
您可以使用shell_exec()
PHP函数直接在脚本中运行Shell Command
。
语法: string shell_exec(string $ cmd)
示例:
$output = shell_exec('ls -lart');
var_dump($output); #Showing the outputs
您可以在一个命令行中使用多个条件。
示例:
$data = "rm a.txt && echo \"Deleted\"";
$output = exec($data);
var_dump($output);
if($output=="Deleted"){
#Successful
}
在上面的示例"Deleted"
中,当文件成功删除时,字符串将分配给$output
。否则,error/warning/empty
字符串将分配给$output
变量。您应该使用$output
字符串创建条件。
以下是shell_exec()
的文档 注意:函数new line
输出将有shell_exec()
个字符。
答案 1 :(得分:0)
您可以使用;
或&&
来分隔命令。 ;
无条件地运行这两个命令。如果第一个失败,第二个仍然运行。使用&&
使第二个命令依赖于第一个命令。如果第一个命令失败,则第二个命令不会运行。 Reference
答案 2 :(得分:0)
如果我正确理解了您的问题,您希望执行$command1
,然后仅在$command2
成功时才执行$command1
。
通过使用&&
加入命令,您尝试的方式是shell脚本中的正确方法(它甚至可以与PHP函数exec()
一起使用)。但是,因为你的脚本是用PHP编写的,所以让我们以PHP的方式编写(实际上,它是以相同的方式,但我们让PHP执行逻辑AND
操作)。
使用PHP函数exec()
运行每个命令并向其传递三个参数。第二个参数($output
,通过引用传递)是一个数组变量。 exec()
将命令的输出附加到它。第三个参数($return_var
,也通过引用传递)是一个由exec()
设置的变量,带有执行命令的退出代码。
Linux / Unix程序的惯例是返回成功的0
退出代码和错误的(一个字节)正值(1
.. 255
)。此外,Linux shell上的&&
运算符知道0
成功,非零值是错误。
现在,PHP代码:
$command1 = "ipcli -S 192.168.4.2 -N nms -P nmsworldcall ";
$command2 = "list search clientclassentry hardwareaddress 00:0E:09:00:00:01";
// Run the first command
$out1 = array();
$code1 = 0;
exec($command1, $out1, $code1);
// Run the second command only if the first command succeeded
$out2 = array();
$code2 = 0;
if ($code1 == 0) {
exec($command2, $out2, $code2);
}
// Output the outcome
if ($code1 == 0) {
if ($code2 == 0) {
echo("Both commands succeeded.\n");
} else {
echo("The first command succeeded, the second command failed.\n");
}
} else {
echo("The first command failed, the second command was skipped.\n");
}
代码结束后,$code1
和$code2
包含两个命令的退出代码;如果$code1
不为零,则第一个命令失败,$code2
为零,但第二个命令未执行。
$out1
和$out2
是包含两个命令输出的数组,分为行。