我已经在互联网上搜索了这个答案,但唉找不到一个。
在PHP中,我可以在if块中运行命令,如此
if(command(blah)) {} else {}
因为每个函数都会返回一个truthy / falsey值。我可以在shell脚本中执行相同的操作吗?我想根据命令是否正确运行来回显输出。运行的赞誉是:
find . -type d -exec sudo chmod -R 775 {} \\;
我想输出它成功运行或失败,然后转到另一个命令。
我可以将命令运行到变量或类似的东西吗?
答案 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或更大)
的变量