在 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 中,您可以使用分组{...}
而不是 subshell (...)
,但我认为为了可读性,最好使用我给您的稍长的版本。
答案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"