Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell脚本错误处理_Linux_Bash_Shell_Scripting - Fatal编程技术网

Linux Shell脚本错误处理

Linux Shell脚本错误处理,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,我正在清理脚本的输出。例如: rm -f ./file 没有这样的文件或目录 我想为这个命令实现一些错误检查,相当于try/catch语句。换句话说,如果命令失败,我想捕获错误。使用set-e,或者您可以使用&&或| |使用set-e实现相同的行为,或者您可以使用&&或| |实现相同的行为,为什么不使用简单的脚本呢 file=$1 if [ ! -f $file ]; then echo "File not found!" else rm -f $file fi 当您运行它

我正在清理脚本的输出。例如:

rm -f ./file
没有这样的文件或目录


我想为这个命令实现一些错误检查,相当于try/catch语句。换句话说,如果命令失败,我想捕获错误。

使用set-e,或者您可以使用&&或| |

使用set-e实现相同的行为,或者您可以使用&&或| |

实现相同的行为,为什么不使用简单的脚本呢

file=$1
if [ ! -f $file ]; then
    echo "File not found!"
else 
    rm -f $file
fi
当您运行它时,脚本将告诉您给定的文件是否不存在

您还可以在echo命令后使用2>&1重定向到stderr和stdout。您还可以在if语句的末尾添加exit 1,因为exit status为1通常表示命令未成功执行


这不会以您希望的方式工作,但在bash中,这是最接近检测错误的方式。

为什么不使用简单的脚本

file=$1
if [ ! -f $file ]; then
    echo "File not found!"
else 
    rm -f $file
fi
当您运行它时,脚本将告诉您给定的文件是否不存在

您还可以在echo命令后使用2>&1重定向到stderr和stdout。您还可以在if语句的末尾添加exit 1,因为exit status为1通常表示命令未成功执行

这不会以您希望的方式工作,但在bash中,这是最接近检测错误的方式。

Python:

try:
    os.remove('./file')
    champagne_for_everybody
except:
    throw_myself_in_the_river
外壳:

if rm ./file
then
    champagne_for_everybody
else
    throw_myself_in_the_river
fi
注:

不使用-f-使用-f时忽略丢失的文件。 如果可以避免,不要使用shell。Python和其他现代语言内置了更复杂的错误处理。 Python:

try:
    os.remove('./file')
    champagne_for_everybody
except:
    throw_myself_in_the_river
外壳:

if rm ./file
then
    champagne_for_everybody
else
    throw_myself_in_the_river
fi
注:

不使用-f-使用-f时忽略丢失的文件。 如果可以避免,不要使用shell。Python和其他现代语言内置了更复杂的错误处理。 rm-f blahblahblah不会在我的系统上打印错误消息。它在你身上吗?什么系统?只是一个提示:搜索set-e,trap…rm-f blahblahblah不会在我的系统上打印错误消息。它在你身上吗?什么系统?只是一个提示:搜索set-e,陷阱。。。