【问题标题】:UNIX shell script while loopUNIX shell 脚本 while 循环
【发布时间】:2011-09-23 20:36:29
【问题描述】:

我正在尝试编写一个脚本来跟踪文件更改的进度。

到目前为止,我有以下内容:

#!/bin/sh
old=‘ls -l /tmp/file‘
new=‘ls -l /tmp/file‘
while [ "$old" = "$new" ]
do
    new=‘ls -l /tmp/file‘
done
echo "The file has been changed"

上面的程序运行时给出的信息:

new: command not found

有人可以帮忙吗。

谢谢

【问题讨论】:

  • 你可能想要"$old" -eq "$new"
  • @Marc,不,在shell中=是字符串比较,-eq是数字比较。
  • @Mike,您可能想在您的 while 循环中添加一个 sleep 5

标签: shell unix


【解决方案1】:

= 周围可能有空间。

在 shell 中,当您分配值时,您不能在 = 周围放置空格:

MY_VAR = "my value"  # this is wrong!

Shell 会认为:“使用参数调用 MY_VAR:('=', 'my value')”,但请稍等!我不知道命令“MY_VAR”!

你需要这样做:

MY_VAR="my value"  # this is OK!

顺便说一句,考虑使用inotifywatch 命令。示例如下:

inotifywatch -v -e access -e modify -t 60 -r /file/to/watch

【讨论】: