shell - Unix Shell 脚本 - 循环直到找不到文件

标签 shell unix

我正在编写 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。

  1. 您应该使用“[[”和“]]”而不是“[”和“]”来评估“find”命令的结果是否为空。
  2. 您应在“查找”命令周围使用“`”来执行并将结果提供给上述评估。

这是修改后的脚本:

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/

相关文章:

php - 使用PHP在服务器上播放音频

unix - tmux 在焦点上调整大小

linux - 向 txt 文件的每一行添加一些文本并传递给 wget

linux - 如何从其他 grep 命令的输出行中获取子字符串

Linux .sh 在回显时自动将局部变量设置为空

java - Shell脚本和java参数

linux - 别名 mkdir 以在 Mac 上打印详细输出

java - 用java重写Perl和shell脚本有意义吗?

shell - 如何 "touch"带有 UTC 时间戳的文件?

linux - 排序并给出总数