我正在编写 shell 脚本。我需要检查特定目录是否存在具有 2 个特定文件扩展名“eob”和“inp”的文件,如果存在我想留在循环中并继续检查直到文件不存在,然后我想从循环中中断并继续执行其余逻辑。
下面是我目前的代码,但它不工作......
while true
do
[ ! find /home/mpcmi/cm -type f \( -name "*.eob" -o -name "*.inp" \) ] && break
echo "eob or inp file exists"
sleep 2
done
echo "eob or inp file doesn't exists"
首先,我在运行脚本时遇到了这个错误:
"/home/mpcmi/cm: unknown test operator"
其次,它检查并正确找到具有这些扩展名的文件,我想是因为我得到输出:“eob 或 inp 文件存在”但是当我删除我的测试“eob”和“inp”文件时,脚本不会似乎检测到它,它停止打印“eob 或 inp 文件存在”,但它从不打印“eob 或 inp 文件不存在”
下面是整个输出,然后在我删除测试“eob”和“inp”文件后它就停止了:
employees_load.sh[9]: /home/mpcmi/cm: unknown test operator
eob or inp file exists
employees_load.sh[9]: /home/mpcmi/cm: unknown test operator
eob or inp file exists
employees_load.sh[9]: /home/mpcmi/cm: unknown test operator
eob or inp file exists
employees_load.sh[9]: /home/mpcmi/cm: unknown test operator
eob or inp file exists
employees_load.sh[9]: /home/mpcmi/cm: unknown test operator
eob or inp file exists
employees_load.sh[9]: /home/mpcmi/cm: unknown test operator
eob or inp file exists
employees_load.sh[9]: /home/mpcmi/cm: unknown test operator
eob or inp file exists
有人可以帮忙吗?
谢谢!
最佳答案
您没有指定使用哪个 shell。我假设它是 bash。
- 您应该使用“[[”和“]]”而不是“[”和“]”来评估“find”命令的结果是否为空。
- 您应在“查找”命令周围使用“`”来执行并将结果提供给上述评估。
这是修改后的脚本:
while true
do
[[ ! `find /home/smb -type f \( -name "*.eob" -o -name "*.inp" \)` ]] && break
echo "eob or inp file exists"
sleep 2
done
echo "eob or inp file doesn't exists"
关于shell - Unix Shell 脚本 - 循环直到找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15460144/