PDA

Visualizza la versione completa : [BATCH] Unix script e lista file input


Markoss01
24-07-2011, 19:52
Ciao a tutti,
premetto che non ho trovato una sezione per presentarsi!


Sto facendo uno scriptino in Korn shell

che deve:

-prendere una lista di file contenuti in un file .txt di input (i file contenuti nel file di input
contengo solo una data in questo formato 20110724)
-per ogniuno di esso controllare la data

E' un po' che sono fermo e mi sono arrugginito.. riesco solo a fare spoolare la lista di file contenuti nel txt ma non a fare in questo caso il 'more' e poi fare il confronto della data

tenendo conto che deve scrivere un log con nome file e "ok" o "ko" a fianco


#!/bin/ksh

. /admin/home/.profile > /dev/null



####### EDIT ME ########

CRON=lista1.txt
#lista2.txt
###### DON'T EDIT #######



cat /admin/home/read/$CRON | while read estra
do
echo $estra


CONF=`find $estra -type f -exec more {} ;`
TIME=$(date "+%Y%m%d")


if [ "$CONF" -eq "$TIME" ];

then

echo "bla bla"

else

echo "bla bla bla"

fi

done



Riuscireste gentilmente ad aiutarmi?
Grazie a tutti!!

Marco

Markoss01
25-07-2011, 11:11
Nessuno che mi riesce a dare una mano??

guardando una guida ho trovato come esempio questo ciclo di "for"


for line in $(cat file.txt) do
rm $
done


riadattandolo un po' per quello che dovrei fare io verrebbe :


TIME=$(date "+%Y%m%d")

for line in $ (cat file.txt) do
more $

if [ "$" -eq "$TIME" ];
then
echo "bla"
else
"bla bla"
fi
done


Non sono sicuro che le variabili siano giuste..

Markoss01
26-07-2011, 20:06
NESSUNOOO????

bubi1
27-07-2011, 17:05
CRON=lista1.txt;for a in `cat $CRON`; do if [ `sed q $a` -eq `date "+%Y%m%d"` ]; then echo "bla bla"; else echo "bla bla bla"; fi; done;

Markoss01
02-08-2011, 01:27
Originariamente inviato da bubi1

CRON=lista1.txt;for a in `cat $CRON`; do if [ `sed q $a` -eq `date "+%Y%m%d"` ]; then echo "bla bla"; else echo "bla bla bla"; fi; done;

ciao bubi1,
grazie per l'aiuto ma non funziona cosi'..

quindi ho cambiato metodo, faccio direttamente un 'ls' dei file..

io ho bisogno di un log che a fianco del nome del file mi dice 'ok' o 'ko' e l'ho di produzione
pero' cosi' come ho fatto mi dą problemi, perche' mi ha listato tutti i nomi dei file contenuti nella lista con di fianco scritto 'ko'.. :confused:



r="/root/read/"
l="/root/out/"
f="${r}Lista.txt"

cat $f | while read e
do
a=`ls -1 $e`
t=`echo $a | ls -lrt $e | awk '{print $8}'`
d=`echo $a |ls -lrt | awk '{print $5}'`

if [ "${a}" -ne "0" ]
then
echo " ${a} ok ${t} ${d}" >>$l/Lista.txt
else
echo " ${a} ko " >> $l/Lista.txt
fi
done

misterx
02-08-2011, 07:01
spero che ci sia l'allegato: casomai leggi qui http://www.dsy.it/forum/showthread.php?threadid=39390

bubi1
02-08-2011, 13:49
Originariamente inviato da Markoss01
ciao bubi1,
grazie per l'aiuto ma non funziona cosi'..

quindi ho cambiato metodo, faccio direttamente un 'ls' dei file..

io ho bisogno di un log che a fianco del nome del file mi dice 'ok' o 'ko' e l'ho di produzione
pero' cosi' come ho fatto mi dą problemi, perche' mi ha listato tutti i nomi dei file contenuti nella lista con di fianco scritto 'ko'.. :confused:



r="/root/read/"
l="/root/out/"
f="${r}Lista.txt"

cat $f | while read e
do
a=`ls -1 $e`
t=`echo $a | ls -lrt $e | awk '{print $8}'`
d=`echo $a |ls -lrt | awk '{print $5}'`

if [ "${a}" -ne "0" ]
then
echo " ${a} ok ${t} ${d}" >>$l/Lista.txt
else
echo " ${a} ko " >> $l/Lista.txt
fi
done

il codice che ti ho dato funzionava con il problema che hai esposto nel primo post. Di quello che hai scritto in questo post non ho capito niente invece.
Esattamente, di cosa hai bisogno tu? Elencare una directory, salvare i nomi dei files in un altro file, con un ok/ko di fianco? E in base a quale condizione ci deve essere l'ok/ko?

Markoss01
02-08-2011, 14:56
l'ho rifatto perchč il tuo non funzionava.. mi dava errore sulla riga di
`cat $CRON`

deve leggere una lista.txt con elencati dei file, lo script deve vedere se essi ci sono
anche solo con un ls

e di questa lista ho bisogno di un output con tutti gli stessi file scritti all'interno con :

NOME_FILE_PRESENTE "OK"
NOME_FILE_NON_PRESENTE "KO"

Cmq solo con il ciglo di "for" si puo' fare, avevi fatto giusto te!

bubi1
02-08-2011, 15:03
quindi devi soltato verificare la presenza fisica dei nomi file sul disco??

for a in `cat /root/read/Lista.txt`;do if [ -f "$a" ]; then echo "$a ok"; else echo "$a nok"; fi; done;

ovviamente all'interno di Lista.txt ci deve essere il percorso completo della cartella dove si trovano i file, altrimenti lo devi aggiungere dinamicamente quando fai il controllo, qualcosa come if [ -f "/altro/percorso/$a" ];

Markoss01
03-08-2011, 11:39
Perfetto! funziona!..

ma se di fianco a NOME e STATUS se voglio mettere anche ora di produzione e size?
Senza complicare troppo la sintassi cosa mi consigli??

Grazie 1000

Marco

Loading