Bash 文件丢失时中止脚本

Bash 文件丢失时中止脚本,bash,file,Bash,File,我有3种类型的文件,它们按以下顺序加载到数据库中: Shipments - File frcrgxxxx.txt Invoices - File frnfsxxxx.txt Invoices Items - File fritsxxxx.txt 其中xxxx可以是任何数字,例如:7834 例如,frcrg7834.txt,frnfs7834.txt和frits7834.txt是一组。 我们每天都会收到数百份文件。如果一个集合中的1个、2个或全部3个文件丢失,脚本应停止 假设以下文件位于处理文件

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

Shipments - File frcrgxxxx.txt
Invoices - File frnfsxxxx.txt
Invoices Items - File fritsxxxx.txt
其中xxxx可以是任何数字,例如:7834

例如,
frcrg7834.txt
frnfs7834.txt
frits7834.txt
是一组。 我们每天都会收到数百份文件。如果一个集合中的1个、2个或全部3个文件丢失,脚本应停止

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

frcrg7834.txt, frcrg7835.txt, frcrg7836.txt,
frnfs7834.txt,                frnfs7836.txt,
frits7834.txt, frits7835.txt, frits7836.txt
应仅加载集合
frcrg7834.txt
frnfs7834.txt
frits7834.txt
,因为第二个集合[
frcrg7835.txt
frits7835.txt
]中缺少文件
frnfs7835.txt
,即使集合3,脚本也应停止在那里[
frcrg7836.txt
frits7836.txt
frnfs7836.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
命令退出脚本


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

请格式化您的问题以提高可读性。您使用的是哪种语言?我需要一个unix脚本来执行上述操作Perl可以吗?还是必须是bash?我需要bash脚本请您忘记在问题的主体。您没有指定文件处理后应如何处理。您没有指定程序如何知道哪些集合已处理。您没有显示您尝试过的代码,也没有解释出现问题的原因。(而且,作为现实世界的设计,因为一个旧条目缺少一个文件而保留新条目可能是个坏主意;然而,这与应该询问的“如何”问题无关。)
continue 2
应该是
break 2
或者
exit 1
;处理应该停止。可能7842和8000应该是
$1
$2
-参数化脚本,以便它知道要处理什么。好的,问题改变了,主要是格式改变了,而不是实质内容,但是格式设置使阅读内容成为可能。