我在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