Bash 表达式结合命令中的 return 代码
Bash expression combined with return code from a command
我想测试一个条件,如果为真 运行 一个命令,如果不为零,则执行 if
.
的主体
我已经尝试了 [] 和 -a 以及 && 和 $() 的所有组合方式,但无法弄清楚。下面的尝试给出了错误:[: too many arguments
(这只是一个简化的例子,问题也是关于更多地了解bash而不是解决特定问题。)
numMd5Files=1
if [ ${numMd5Files} -eq 1 ] -a [ ! $( md5sum -c md5.txt ) ] ; then
echo "md5 error"
fi
您可能需要:
if [ ${numMd5Files} -eq 1 ] && md5sum -c md5.txt; then
文件数必须为 1 且 md5sum
命令必须成功才能执行 then
块。您可能最终将 md5sum
的输出重定向到 /dev/null
,因此您看不到它说的是什么:
if [ ${numMd5Files} -eq 1 ] && md5sum -c md5.txt >/dev/null 2>&1; then
如果您只对 md5sum
失败感兴趣,那么可以使用 Bash 内置 !
命令反转 md5sum
的退出状态:
if [ ${numMd5Files} -eq 1 ] && ! md5sum -c md5.txt; then
if
命令只是测试命令的退出状态。当您使用 [
时,将执行 [
命令并产生零或非零退出状态。如果退出状态为0,则成功,执行then
子句。如果退出状态不为 0,则失败,并改为执行 elif
或 else
子句(如果存在)。
通常有一个外部命令 /bin/test
又名 /bin/[
— 但大多数现代 shell 也有 test
和 [=21= 的内置变体] 优先于外部命令执行。
用&&
运算符,执行左边的命令;如果成功,则执行右边的命令,如果也成功,则执行then
子句。
[[
运算符仅可用作 shell 的内置运算符。
我还有一个外部命令的代码 not
(1991 年的第一个版本),我以前有时会用到,可以用一个名为 !
的 link 安装,因此对于没有内置 !
命令的 shells,我仍然可以反转命令的退出条件。不是很复杂!
我想测试一个条件,如果为真 运行 一个命令,如果不为零,则执行 if
.
我已经尝试了 [] 和 -a 以及 && 和 $() 的所有组合方式,但无法弄清楚。下面的尝试给出了错误:[: too many arguments
(这只是一个简化的例子,问题也是关于更多地了解bash而不是解决特定问题。)
numMd5Files=1
if [ ${numMd5Files} -eq 1 ] -a [ ! $( md5sum -c md5.txt ) ] ; then
echo "md5 error"
fi
您可能需要:
if [ ${numMd5Files} -eq 1 ] && md5sum -c md5.txt; then
文件数必须为 1 且 md5sum
命令必须成功才能执行 then
块。您可能最终将 md5sum
的输出重定向到 /dev/null
,因此您看不到它说的是什么:
if [ ${numMd5Files} -eq 1 ] && md5sum -c md5.txt >/dev/null 2>&1; then
如果您只对 md5sum
失败感兴趣,那么可以使用 Bash 内置 !
命令反转 md5sum
的退出状态:
if [ ${numMd5Files} -eq 1 ] && ! md5sum -c md5.txt; then
if
命令只是测试命令的退出状态。当您使用 [
时,将执行 [
命令并产生零或非零退出状态。如果退出状态为0,则成功,执行then
子句。如果退出状态不为 0,则失败,并改为执行 elif
或 else
子句(如果存在)。
通常有一个外部命令 /bin/test
又名 /bin/[
— 但大多数现代 shell 也有 test
和 [=21= 的内置变体] 优先于外部命令执行。
用&&
运算符,执行左边的命令;如果成功,则执行右边的命令,如果也成功,则执行then
子句。
[[
运算符仅可用作 shell 的内置运算符。
我还有一个外部命令的代码 not
(1991 年的第一个版本),我以前有时会用到,可以用一个名为 !
的 link 安装,因此对于没有内置 !
命令的 shells,我仍然可以反转命令的退出条件。不是很复杂!