2011-12-14 4 views
0

Хорошо, я могу заставить это запустить и поместить файл на удаленный сервер. Однако, когда он выполняется, я хочу, чтобы он эхо передал неудачу, Перенос OK, Нулевые байты в файле и Нет такого файла или каталога. Он просто сбивает код и отправляет электронное письмо последней записи, которая не является таким файлом или каталогом, когда отчет явно передается на сервер. Что я делаю не так ?? Thx заранее, благодарю вас.Отчеты об ошибках Bash

#!/bin/sh 
HOST=10.10.1.2 
USER='test' 
RECIP="[email protected]" 
cd /home/test 
FILE=ARG$(date '+%Y%m%d').txt 
BYTES=`stat -c%s $FILE` 
CONNECTION=`netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print ""}'` 
RUN_AS=`whoami` 
RESULT=`sftp [email protected]$HOST <<EOF 
FILE=ARG$(date '+%Y%m%d').txt 
cd /998979/DES 
if [ -e $FILE ]; then 
put $FILE 
EOF` 

echo $CONNECTION "Connection to network is established." 

ls | xargs wc -wl for file in *; echo $FILE done 
if [ $? -eq 0 ]; then 
echo "$RESULT" "Transfer of file failed. `date`" 
SBJ="Transfer of file failed `date`" 
fi 
echo "$RESULT" "Transfer OK" 
if [ $? -eq 0 ]; then 
SBJ="Transfer OK. `date`" 
echo "$RESULT" "Transfer OK" 
fi 
if \[ ! -s ${FILE} \]; then 
echo "File: ${FILE} is not present or a ZERO byte file" 
SBJ="Failed to upload. Zero bytes in file. `date`" # zero bytes sent 
fi 
if [ -a $FILE ]; then 
echo "$RESULT" "No such file or directory" 
SBJ="No such file or directory. `date`" 
fi 

BODY="Process Report....... 

SRC SERVER:`hostname` 
DST SEVER: TESTSERVER 
SCRIPT: /usr/local/bin/put.sh 
RUN AS: "$RUN_AS" 

RESULT: "$RESULT" "$FILE" 

CONNECTION: "$CONNECTION" 

FILENAME: "$FILE" 

BYTES: "$BYTES" 
DATE/TIME: `date`" 

echo "$BODY" | mail -s "$SBJ" "$RECIP" 
+1

Хм, что именно вы видите сейчас? 'ls | xargs wc -wl для файла в *; echo $ FILE done' выглядит странно –

ответ

2

Вы можете использовать /bin/sh -xv yourshellscript.sh, чтобы понять, что происходит.

И вы могли бы войти важные сообщения в системный журнал с помощью logger

+0

ls | xargs wc -wl для файла в *; echo $ FILE done – user1098279

+0

Вышеприведенное просто перечисляет файлы в папке при запуске скрипта. – user1098279

0
count=$? 

if [ $count -eq 0 ]; then 
echo "$RESULT" "Transfer of file failed. 
`date`" SBJ="Transfer of file failed `date`" 
else 
echo "$RESULT" "Transfer OK" 
fi 

Присвоить результат переменной, Кроме того, попытайтесь использовать выход, когда вам не нужно делать больше обработки.

+0

Пробовал выше, все еще не кубики. – user1098279

+0

Я могу заставить его создать «ошибку» без такого файла или каталога и нулевых байтов в файле. Я только что запустил сценарий, и он придумал «нет такого файла или каталога», когда я ясно видел, как FTP перешел на 100%. Я так запутался. – user1098279

+0

Так что даже с – user1098279