缺少文件时中止脚本

时间:2015-01-27 14:51:56

标签: 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,因为第二集[frnfs7835.txt,{{1}中缺少文件frcrg7835.txt即使设置3 [frits7835.txtfrcrg7836.txtfrits7836.txt]可用,脚本应该停在那里。

在上面的场景中,如果缺少任何7834文件,则不应加载任何文件。

2 个答案:

答案 0 :(得分:1)

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

#!/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

答案 1 :(得分:0)

您可以使用break命令退出循环。

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

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