糟糕的替代

糟糕的替代

我正在编写一个 shell 脚本,它将监视文件夹“/home/Folder”,当它发现文件格式 1234567.csv 文件时,它将调用 script.py。

inotifywait -m --format '%f' -e create /home/Folder | while read FILE
do
   echo "$FILE is created"
   if [[ "${FILE: -11}" == "1234567.csv"]]
   then
       echo "correct format"
       python /home/Folder/script.py
   else
       echo "NOT correct format"
   fi
done

但是我得到了“错误替换”错误,并且 if-else 条件没有执行。我想知道这是检查文件的最后 11 位数字是否与 1234567.csv 相同的正确方法吗?[[ "${FILE: -11}" == "1234567.csv"]]

答案1

您在测试末尾缺少一个空格 - "1234567.csv"]],它应该是:

[[ "${FILE: -11}" == "1234567.csv" ]]

要查找此类简单错误,您可以使用shellcheck 在线的您也可以通过以下方式安装它apt,然后执行以下操作:

shellcheck script.sh

注意:放置正确的舍邦在脚本的开头。它告诉当前 shell 中语言剧本必须相互关联。

目前您正在使用一些 Bash 功能 - 作为双括号测试(输入help [[help [查看差异)因此您必须指定#!/bin/bash为 shebang。

如果是,#!/bin/sh则需要使用 Dash/Sh 语法重写脚本。如果脚本是纯 Python3,则必须使用 shebang#!/usr/bin/python3或 以提高可移植性#!/usr/bin/env python3

如果缺少 shebang,那么脚本可能会在你的 shell 中运行(如果它是一个 Bash 脚本并且你的 shell 是 Bash) - 但是它会失败,例如,在内部,crontab因为默认情况下它使用/usr/bin/sh作为 shell。

相关内容