我在 bash 脚本中有以下部分代码。
for dir in $(find /etc/aaa -type d -maxdepth 1)
do
#my code
done
#my code
如果/etc/aaa
目录不存在,那么我想退出脚本并出现一些错误。
我知道我可以在执行 for 循环之前测试目录是否存在。
但我想知道是否有其他方法(仅在 for 循环中的短方法),这样如果目录/etc/aaa
不存在,那么它应该退出,否则脚本应该继续。
在当前情况下,脚本给出错误find: /etc/aaa: No such file or directory
并在 for 循环后继续剩余部分。
for循环的退出状态也是0。
答案1
你可以这样做:
if dirs="$(find /etc/aaa -type dir -maxdepth 1 2> /dev/null)"; then
for dir in ${dirs}; do
# Your code
done
# Your code
else
# find failed, generate error
fi
答案2
我不明白为什么你想在执行过程中退出循环。如果您想要的目录不存在,我认为不值得执行循环。
我认为你应该做一些事情:
if [ ! -d /etc/aaa ]; do
echo "Error"
exit 1
else
for files in $(ls /etc/aaa); do
# code
done
# more code
fi
如果这根本不是您想要的,请解释您想要实现的目标。
答案3
我认为在循环之前进行逻辑测试更容易。但这是对 for 语句的修改:
for dir in `! find /etc/aaa -type d -maxdepth 1 2>/dev/null && echo error && exit`;
do
//your code
done
//your code
这也将抑制 stderr寻找。