退出在 shell 脚本中不起作用

退出在 shell 脚本中不起作用

在 shell 脚本中,我有以下代码,可以在数据库脱机时提前退出;

Br3trans -u / -c -f dbstate && ( echo Datenbank ist online. ; echo Nächster Schritt... ) || ( echo "Datenbank ist offline" ; exit 1 );
echo Test

如果数据库离线,它不会退出脚本,而是回显“测试”。

有任何想法吗?

答案1

exit语句退出子 shell。

如果您展开单行文字,它将开始按您的预期工作

#!/bin/bash
if Br3trans -u / -c -f dbstate
then
    echo "Datenbank ist online."
    echo "Nächster Schritt..."
else
    echo "Datenbank ist offline"
    exit 1
fi
echo Test

或者,在某些 shell 中,您可以使用分组{...}而不是 subshel​​l (...),但我认为为了可读性,最好使用我给您的稍长的版本。

答案2

我认为你的问题是你有exit一个( ... )封闭组中的命令,它将执行一个封闭组中的所有命令子壳专为该命令组创建。因此,您的exit语句仅适用于子 shell,而不适用于运行脚本的主 shell。

在这种情况下,我建议显式测试命令而不是“单行”方法:

#!/bin/bash

if Br3trans -u / -c -f dbstate
then
   echo "Datenbank ist online"
   echo "Nächster Schritt ..."
else
   echo "Datenbank ist offline"
   exit 1
fi
echo "Test"

如果您愿意,您仍然可以将其写为一行:

if Br3trans -u / -c -f dbstate; then echo "Datenbank ist online"; echo "Nächster Schritt"; else echo "Datenbank ist offline"; exit 1; fi
echo "Test"

相关内容