Shell if语句基于命令输出/完成

时间:2012-08-13 15:28:47

标签: bash shell

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

在PHP中,我可以在if块中运行命令,如此

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

因为每个函数都会返回一个truthy / falsey值。我可以在shell脚本中执行相同的操作吗?我想根据命令是否正确运行来回显输出。运行的赞誉是:

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

if my_command; then
  echo It worked.
fi

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

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挂载上。

答案 1 :(得分: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或更大)

的变量