如果找不到特定文件,我希望我的脚本结束。因此,我写下以下内容:
[ -f "$DAEMON" ] || (echo "File $DAEMON not found" && exit 0)
但它无法正常工作。如果该文件不存在,我的脚本将输出此错误消息并继续工作。
我试过
[ -f "$DAEMON" ] || { echo "File $DAEMON not found" && exit 0 }
(正如这里建议exit doesn't work in bash),但我得到了语法错误(意外的文件结束)。
[ -f "$DAEMON" ] || exit 0
效果不错但[ -f "$DAEMON" ] || (exit 0)
没有。
如何输出错误信息并停止执行脚本?
答案 0 :(得分:6)
你的复合命令({ ... }
构造)在结束括号之前需要分号 - 它不是可选的!所以这将有效:
[ -f "$DAEMON" ] || { echo "File $DAEMON not found" && exit 0; }
答案 1 :(得分:4)
我想您可能会发现,在someErrorProgram || (exit 0)
中,由于括号,exit 0
正在子shell 中运行。这意味着exit
将退出子shell而不是您认为正在运行的shell。
但是,除非你绝对绝望将它保持在一条线上,否则我只会使用:
if [[ ! -f "$DAEMON" ]] ; then
echo "File $DAEMON not found"
exit 0
fi
答案 2 :(得分:3)
使用if语句:
if [ ! -f "$DAEMON" ]
then
echo "File $DAEMON not found"
exit 0
fi
答案 3 :(得分:3)
在这种情况下,我使用errecho
函数,例如
errecho() { echo "$@" >&2; return 1; }
返回1允许我链接错误条件,例如像
[[ -f file ]] || errecho "file doesnt exists" || exit 1
对于更深层次的功能也很有用
action() {
[[ some cond ]] || errecho "errmsg" || return 1
}
do_something() {
action "$1" "$3" || errecho "action failed with $3" || return 1
}
#main
do_something || errecho "total fail " || exit 1
答案 4 :(得分:1)
如果您需要单行解决方案并且可以正常使用
,则可以使用此功能[[ -f "filename" ]] || { echo "file doesnt exists" && exit ;}
echo "bye"
如果文件没有,我没有在控制台中找到再见。
答案 5 :(得分:0)
使用循环和if语句。使用echo,您可以检查脚本到哪一点。在当前情况下,脚本在遇到守护进程或C时会中断,因此只有回声A和B.
for i in A B Daemon C; do
if
[ $i == Daemon ] ||
[ $i == C ]
then
break
fi
echo "$i"
done