1

我已经在互联网上搜索了这个答案,但可惜找不到。

在 PHP 中,我可以在 if 块中运行命令,就像这样

if(command(blah)) {} else {}

因为每个函数都会返回一个真/假值。我可以在 shell 脚本中做同样的事情吗?我想根据命令是否正确运行来回显输出。运行的推荐是:

find . -type d -exec sudo chmod -R 775 {} \\;

我想输出它运行成功或失败,然后继续执行另一个命令。

我可以将命令运行到变量或类似的东西中吗?

4

2 回答 2

4

Shell 命令通常返回一个指示成功或失败的退出代码,0指示成功,其他任何指示某种错误(具体取决于您正在运行的命令)。

您可以在 if 语句中测试此退出代码:

if my_command; then
  echo It worked.
fi

您还可以使用||and&&运算符将命令链接在一起。

my_command && echo It worked.
my_command || echo It failed.

您使用该命令的具体示例find有点棘手。该chmod命令可能会失败,但该find命令仍将“成功”完成。这样的事情可能会有所帮助:

find . -type d -exec sudo sh -c 'chmod -R 775 {} || echo "FAILED {}"' \;

这将打印...

FAILED ./path/to/directory

...对于它失败的任何地方,所以你可以检查输出。但我不确定这是绝对必要的。在少数情况下您的命令会失败:例如,在只读文件系统上,或者可能在 NFS 挂载上。

于 2012-08-13T15:31:07.047 回答
0

我的看法是:

find . -type d|while read directory
do
  chmod -R 755 ${directory}
  if [ $? = 0 ];then
     echo "successfully changed ${directory}
  else
     echo "Did not change ${directory}
  fi
done

这打破了它并且更具可读性,您可以测试每个命令。美元?是用成功(0)或失败(1或更大)填充的变量

于 2012-08-13T18:18:00.163 回答