2014-11-15 4 views
2

Я создаю скрипт для проверки 3 файлов в Каталоге, беру количество строк в них и почту, если строки существуют. Мне нужно отправить только одно письмо, если один из эти файлы имеют счет, я заканчиваю отправку 3 писем.сценарий оболочки для проверки нескольких файлов с разными именами

Для примера. У меня есть эти файлы

process_date.txt 
thread_date.txt 
child_date.txt 

И делать что-то вроде

$1= process_date.txt 
$2= thread_date.txt 
$3= child_date.txt 

if [ -f $1 ] 
then 
count1=`wc-l < $1` 
if $count1 -ne 0 then mailx abc.com 
fi 
fi 

if [ -f $2 ] 
then 
count2=`wc-l < $2` 
if $count2 -ne 0 then mailx abc.com 
fi 
fi 

if [ -f $3 ] 
then 
count3=`wc-l < $3` 
if $count3 -ne 0 then mailx abc.com 
fi 
fi 

ответ

1

Вы можете обернуть свой скрипт в функции и использовать return команды после каждого mailx, как это:

send_one_mail() { 
    if [ -f "$1" ] 
    then 
    count1=$(wc -l < "$1") 
    if [ $count1 -ne 0 ] 
    then 
     mailx abc.com 
     return 
    fi 
    fi 

    # etc. for other conditions 

} 

send_one_mail process_date.txt thread_date.txt child_date.txt 
+0

Thank you @pwes ... :) – Naaz

1

Попробуйте это :

if [ -f $1 ] 
then 
    count1=`wc -l < $1` 
fi 

if [ -f $2 ] 
then 
    count2=`wc -l < $2` 
fi 

if [ -f $3 ] 
then 
    count3=`wc -l < $3` 
fi 


if [ $count1 -ne 0 -o $count2 -ne 0 -o $count3 -ne 0 ] 
then 
    mailx abc.com 
fi 
+0

@ Pranab: Thank you. :-) – Naaz

2

Как вы заявили свой вопрос, кажется, вам нужно только проверить, не является ли хотя бы один из файлов непустым: вам не нужно подсчитывать количество строк. В Bash вы можете использовать тест [[ -s file ]], чтобы точно проверить, существует ли file и не является пустым. Так что вы можете сделать:

#!/bin/bash 

if [[ -s $1 ]] || [[ -s $2 ]] || [[ -s $3 ]]; then 
    mailx abc.com 
fi 

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

#!/bin/bash 

for file; do 
    if [[ -s $file ]]; then 
     mailx abc.com 
     break 
    fi 
done 

Вы называем это as

scriptname process_date.txt thread_date.txt child_date.txt 
+0

@ PM2Ring Оооопс, ты прав! спасибо, отредактирован –

+0

@ gniourf_gniourf, мне нужно отправить только одно письмо (если в файле есть записи. если у 3 файлов есть записи или 2 файла или 1), и это должно быть обычным почтовым ящиком. Почта не должна реплицироваться. – Naaz

+1

@Naaz: Но этот скрипт отправляет только 1 почту из-за команды 'break'. Вы можете протестировать его, заменив 'mailx abc.com' на' echo abc.com' –

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