Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于cammand输出/完成的Shell if语句_Bash_Shell - Fatal编程技术网

Bash 基于cammand输出/完成的Shell if语句

Bash 基于cammand输出/完成的Shell if语句,bash,shell,Bash,Shell,我在互联网上搜寻这个答案,但可惜找不到 在PHP中,我可以在if块中运行命令,如下所示 if(command(blah)) {} else {} 因为每个函数将返回一个truthy/false值。我可以在shell脚本中执行同样的操作吗?我想根据命令是否正确运行来回显输出。即将举行的选举是: find . -type d -exec sudo chmod -R 775 {} \\; 我想输出它成功运行或失败,然后转到另一个命令 我可以将命令运行到变量或类似的东西中吗?Shell命令通常返回一

我在互联网上搜寻这个答案,但可惜找不到

在PHP中,我可以在if块中运行命令,如下所示

if(command(blah)) {} else {}
因为每个函数将返回一个truthy/false值。我可以在shell脚本中执行同样的操作吗?我想根据命令是否正确运行来回显输出。即将举行的选举是:

find . -type d -exec sudo chmod -R 775 {} \\;
我想输出它成功运行或失败,然后转到另一个命令


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

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

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挂载上。我的目标是:

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或更大)填充的变量。

我的目标是:

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或更大)填充的变量

感谢您提供了一个非常简洁的答案!我将相应地修改我的命令和脚本。感谢您提供了一个非常简洁的答案!我将相应地修改我的命令和脚本。感谢您的回答。虽然也是正确的,但我选择了一个解释更简洁的答案。没问题,我的Python极客更喜欢可读性:)谢谢你的回答。虽然答案也是正确的,但我选择了更简洁的解释。没问题,我的Python极客更喜欢可读性:)