Bash 文件丢失时中止脚本
我有3种类型的文件,它们按以下顺序加载到数据库中: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个文件丢失,脚本应停止 假设以下文件位于处理文件
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
-参数化脚本,以便它知道要处理什么。好的,问题改变了,主要是格式改变了,而不是实质内容,但是格式设置使阅读内容成为可能。