【问题标题】:Shellscript If statement returns errorShellscript If 语句返回错误
【发布时间】:2017-07-30 13:43:16
【问题描述】:

我正在尝试检查文件是否超过 5 分钟,如果是这种情况,我想调用另一个向我发送邮件的 shell 脚本。

check_file.sh:

#!/bin/sh

if [$(( (`date +%s` - `stat -L --format %Y /home/ftp/test.txt`) > (5*60) ))] = 1
        then sh ./testmail.sh
fi

错误输出:3: ./check_file.sh: [1]: not found

【问题讨论】:

  • 在 if 条件中添加空格:if [ condition ],而不是 if [condition]

标签: linux bash shell ubuntu


【解决方案1】:

这行得通:

if test "`find /home/ftp/test.txt -mmin +5`"; then
        echo "file found"
fi

【讨论】:

    【解决方案2】:

    您的脚本首先根据$((....)) 表达式计算一个数字。在你的情况下,这个数字似乎是1

    这意味着你只剩下命令了

    if [1] = 1
    

    这意味着 bash 会尝试查找名为 [1] 的命令并使用两个参数调用它,=1

    由于在您的 PATH 中找不到名为 [1] 的可执行文件,因此 bash 会告诉您它找不到该文件。

    我认为

    if (( (`date +%s` - `stat -L --format %Y /home/ftp/test.txt`) == 1 ))
    then 
        ....
    

    应该做的工作。

    【讨论】:

      【解决方案3】:

      尝试类似:

      if find /home/ftp/test.txt -mmin +5 &>/dev/null; then
          <your code>
      fi
      

      【讨论】:

      • 这样“then”statemant 将永远被执行......刚刚尝试过。
      • 这只是一个提示。无论如何,查找程序是检查这些条件的最佳方法。
      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 2021-08-31
      • 2012-11-19
      • 1970-01-01
      相关资源
      最近更新 更多