首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux Bash脚本错误处理

问Linux Bash脚本错误处理
EN

Stack Overflow用户
提问于 2015-03-20 14:07:53
回答 3查看 1.1K关注 0票数 2

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

例如,通常情况下,当我想循环遍历目录中的文件时,我会这样写它

代码语言:javascript
复制
# list files and grep results for .sql extension
for FILE in `ls | grep ".sql"`
do
    echo "found file: $FILE"
done

它工作得很好,因为grep如果有.sql扩展名或不返回任何内容,就会返回文件名。

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

代码语言:javascript
复制
ls ./*.sql

,它返回文件名,但如果找不到文件,则返回错误

代码语言:javascript
复制
ls: ./*.sql: No such file or directory

是否可以检查Linux命令是否正在返回bash脚本中的错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-20 14:12:24

首先,这里并不需要ls命令。你可以这样做:

代码语言:javascript
复制
# list files and grep results for .sql extension
for file in *.sql; do
    echo "found file: $file"
done

然后,如果*.sql文件不存在,则要避免进行一次迭代,请使用:

代码语言:javascript
复制
shopt -s nullglob
# list files and grep results for .sql extension
for file in *.sql; do
    echo "found file: $file"
done

通常,您可以在运行任何命令之后检查$?,以检查最近执行的命令的状态。

票数 2
EN

Stack Overflow用户

发布于 2015-03-20 14:11:25

您可以使用&&和||检查错误。

代码语言:javascript
复制
ls ./*.sql && echo "some files exist" || echo "no such files exist"

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

代码语言:javascript
复制
ls ./*.sql ; echo $?
票数 2
EN

Stack Overflow用户

发布于 2015-03-20 14:16:47

您可以使用bash中的$?变量检查最后一次运行命令的退出代码。通常,对成功的执行返回0,对于失败的执行返回1或更高版本。例如:

代码语言:javascript
复制
$ touch /root/test 
touch: cannot touch ‘/root/test’: Permission denied
$ echo $?
1

您可以将其合并到bash脚本中,如下所示:

代码语言:javascript
复制
#!/bin/bash

touch /root/test

if [ $? -eq 0 ]
then
  echo "Successfully created file"
else
  echo "Could not create file"
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29168470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档