Linux Bash脚本error handling

我在Linux中使用bash脚本来迁移数据库输出文件,我想知道在bash脚本中执行Linux命令时处理错误的方法。

例如通常当我想循环通过目录中的文件,我会写这样的

# list files and grep results for .sql extension for FILE in `ls | grep ".sql"` do echo "found file: $FILE" done 

这完美地工作,因为如果它有一个.sql扩展名或返回什么,grep返回文件名

我想知道如何使用返回结果或错误的Linux命令,如

 ls ./*.sql 

它返回文件的名字,但是如果没有find文件则返回错误

 ls: ./*.sql: No such file or directory 

是否有可能检查一个Linux命令是否在bash脚本中返回一个错误?

首先你不需要在这里的命令。 你可以做:

 # list files and grep results for .sql extension for file in *.sql; do echo "found file: $file" done 

然后,如果*.sql文件不存在,为了避免单次迭代,请使用:

 shopt -s nullglob # list files and grep results for .sql extension for file in *.sql; do echo "found file: $file" done 

一般来说,你可以检查$? 运行任何命令后检查最近执行的命令的状态。

您可以使用&&||来检查错误 :

 ls ./*.sql && echo "some files exist" || echo "no such files exist" 

您可以通过检查$?获取上次运行程序的错误代码$?

 ls ./*.sql ; echo $? 

您可以使用$?来检查上次运行命令的退出代码 变量在bash中。 通常情况下,成功执行返回0 ,失败执行返回1或更高。 举个例子:

 $ touch /root/test touch: cannot touch '/root/test': Permission denied $ echo $? 1 

你可以将它合并到你的bash脚本中,如下所示:

 #!/bin/bash touch /root/test if [ $? -eq 0 ] then echo "Successfully created file" else echo "Could not create file" fi