我在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如果有.sql扩展名或不返回任何内容,就会返回文件名。
我想知道如何使用返回结果或错误的Linux命令,例如
ls ./*.sql,它返回文件名,但如果找不到文件,则返回错误
ls: ./*.sql: No such file or directory是否可以检查Linux命令是否正在返回bash脚本中的错误?
发布于 2015-03-20 14:12:24
首先,这里并不需要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通常,您可以在运行任何命令之后检查$?,以检查最近执行的命令的状态。
发布于 2015-03-20 14:11:25
您可以使用&&和||检查错误。
ls ./*.sql && echo "some files exist" || echo "no such files exist"您可以通过检查$?获得上一次运行程序的错误代码。
ls ./*.sql ; echo $?发布于 2015-03-20 14:16:47
您可以使用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"
fihttps://stackoverflow.com/questions/29168470
复制相似问题