错误处理Bash脚本

时间:2013-09-11 11:17:23

标签: linux bash shell

我不是脚本编写的高手,所以我必须在这里问:)

如何实现错误处理:

find . -type f|sed 's_\.\/__' > $PATH

即。当这不成功时中止。

非常感谢您提前 托马斯

2 个答案:

答案 0 :(得分:1)

尝试使用&&和&或||

find . -type f|sed 's_./__' > $PATH && if_true_do_something || if_false_do_something

答案 1 :(得分:0)

首先,你的命令至少肯定会失败,因为$ PATH是一条无效的单一路径。

find . -type f | sed 's_\.\/__' > $PATH

如果要检查两个命令是否运行良好,请使用pipefail选项,如果沿线的任何命令返回一个,而不仅仅是最后一个命令,则管道调用将返回非零状态。 / p>

set -o pipefail  ## You have this only once in the script.

find . -type f | sed 's_\.\/__'  > $PATH || {
    echo "Failed."
    exit 1  ## This probably is what you mean to abort.
}

# Shell script continues here... 

替代方案:

...
find . -type f | sed 's_\.\/__' > $PATH
if [[ $? -ne 0 ]]; then
    echo "Failed."
    exit 1
fi

示例:

> set +o pipefail  ## Disable pipefail (default).
> true | false
> echo $?
1
> false | true
> echo $?
0

> set -o pipefail  ## Enable pipefail.
> true | false
> echo $?
1
> false | true
> echo $?
1

请注意,即使false不在最后,最后一个命令也会返回1。在禁用pipefail时,即使其中一个命令(false)返回1,管道命令仍会返回0。