2015-01-27 2 views
-3

У меня есть 3-х типов файлов, и они загружаются в базу данных в следующей последовательности:прервать сценарий, когда файл отсутствует

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

где хххх может быть любое число, например: 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 должны быть загружены, так как файл frnfs7835.txt отсутствует из второго набора [frcrg7835.txt, frits7835.txt] а скрипт должен остановиться там, хотя набор 3 [frcrg7836.txt, frits7836.txt, frnfs7836.txt] доступен.

В приведенном выше сценарии, если какой-либо из 7834 файлов отсутствует, файлы не должны загружаться.

+0

Пожалуйста, отформатируйте свой вопрос, чтобы улучшить читаемость. И какой язык вы используете? –

+0

Мне нужен сценарий unix, чтобы сделать выше – user86683

+0

Будет ли Perl в порядке? Или это должно быть bash? – nlu

ответ

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 
+0

'Continue 2' должен быть либо' break 2', либо 'exit 1'; обработка должна прекратиться. Вероятно, 7842 и 8000 должны быть '$ 1' и' $ 2' - параметризовать сценарий, чтобы он знал, что обрабатывать. –

+0

Хорошо, вопрос изменился тем временем – nlu

+0

Это было главным образом форматирование, которое изменилось, а не вещество, но форматирование позволяет читать вещество. –

0

Вы можете выйти из цикла с break команда.

Вы можете выйти из сценария командой exit.

Любой из них - разумный способ остановить обработку - что лучше зависит от контекста (например, есть ли работа по очистке). Убедитесь, что вы сообщаете об ошибке соответствующим образом, чтобы люди знали, почему сценарий больше не обрабатывает что-либо.

Смежные вопросы