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