缺少文件时中止脚本

  • 本文关键字:脚本 文件 bash file
  • 更新时间 :
  • 英文 :


我有 3 种类型的文件,它们按以下顺序加载到数据库中:

Shipments - File frcrgxxxx.txt
Invoices - File frnfsxxxx.txt
Invoices Items - File fritsxxxx.txt

其中 xxxx 可以是任何数字,例如:7834

例如,frcrg7834.txtfrnfs7834.txtfrits7834.txt是一个集合。我们每天都有数百个文件。如果集合中的 1、2 或全部 3 个文件丢失,脚本应在此处停止。

假设以下文件位于处理文件夹中:

frcrg7834.txt, frcrg7835.txt, frcrg7836.txt,
frnfs7834.txt,                frnfs7836.txt,
frits7834.txt, frits7835.txt, frits7836.txt

只有集合frcrg7834.txtfrnfs7834.txtfrits7834.txt应该加载,因为第二个集合 [frcrg7835.txtfrits7835.txt] 中缺少文件frnfs7835.txt,脚本应该停在那里,即使集合 3 [frcrg7836.txtfrits7836.txtfrnfs7836.txt] 可用。

在上述情况下,如果缺少 7834 文件中的任何一个,则不应加载任何文件。

正如您所说,所有三个文件都可能丢失,您必须定义所需的集合 - 在这种情况下作为参数传递给脚本:

#!/bin/bash 
FIRST_SET=$1
LAST_SET=$2
DIR=dir
for set in $(seq $FIRST_SET $LAST_SET)
do
    for type in "fcrg" "frnfs" "frits"
    do
        if [ ! -r $DIR/${type}${set}.txt ]
        then
            echo "found incomplete set $set - exiting"
            exit 2
        fi
    done
done
# do_something
您可以使用

break 命令退出循环。

您可以使用 exit 命令退出脚本。

两者都是停止处理的合理方法 - 这更好取决于上下文(例如,是否有清理工作要做)。 确保正确报告错误,以便人们知道脚本不再处理任何内容的原因。

最新更新