Linux Bash 脚本错误处理

Linux Bash Script 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

这很完美,因为 grep returns 文件名,如果它有一个 .sql 扩展名或 returns 什么都没有

我想知道如何使用 Linux 命令来 returns 结果或错误,例如

ls ./*.sql

哪个 returns 文件名,但如果找不到文件,它 returns 错误

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

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

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

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

最后一个运行程序的错误代码可以通过检查$?得到:

ls ./*.sql ; echo $?

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

# 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

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

您可以使用 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