Ich habe ein Shell-Skript, das die ganze Zeit der Suche nach einer bestimmten Art von Datei-und IT-Prozesse, dann die Datei durch eine Reihe von anderen Skripten. Das Skript ist gerade ein Verzeichnis, das Dateien hochgeladen über SFTP. Es prüft bereits die Größe der Datei, um sicherzustellen, dass sie nicht mehr hochladen, bevor es beginnt die Verarbeitung. Ich möchte eine Prüfung, in dem Skript, das für die Existenz von einer anderen Datei vor der Verarbeitung beginnt. Das Skript sieht wie folgt aus:
Code:
#!/bin/ksh
PATH=/gers/nurev/menu/pub/sbin:/gers/nurev/menu/pub/bin:/gers/nurev/menu/pub/mac
:/gers/nurev/menu/adm/sbin:/gers/nurev/menu/adm/bin:/gers/nurev/menu/adm/mac:/ge
rs/nurev/custom:/gers/nurev/fix:/gers/nurev/src_rev/fix:/gers/nurev/opt/path:/ge
rs/nurev/bin:/g/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:.
ORACLE_HOME=/gers/nurev
ORACLE_SID=nurev
export PATH
export ORACLE_HOME
export ORACLE_SID
#
# Function : is_file_arrived file
# Arg(s) : file = file to verify
# Output : None
# Status : 0 = yes file arrived, 1 = no
# Env. : IFA_WAIT : interval (secs) for file size check (def=5)
#
is_file_arrived() {
[ -z "$1" ] && return 1
local file=$1
local arrived=1
local size1 size2
if [ -f "$file" -a -z "$(fuser $file 2> /dev/null)" ] ; then
size1=$(ls -l $file 2>/dev/null | awk '{print $5}')
sleep ${IFA_WAIT:-15}
size2=$(ls -l $file 2>/dev/null | awk '{print $5}')
[ ${size1:-1} -eq ${size2:-2} ] && arrived=0
fi
return $arrived
}
processFile ()
{
local fileName=$1
local fileExtension=$2
local fileNewName="/gers/nurev/datafiles/str${fileExtension}.asc"
local filePrintPath="/gers/nurev/print"
local fileTmpPath="/gers/nurev/tmp"
local fileODIName="str${fileExtension}.pos"
mv -Eignore $fileName $fileNewName
prepup $fileNewName $fileExtension
mv -Eignore $filePrintPath/$fileODIName $fileTmpPath/$fileODIName
save2tmp $fileExtension
call_siu $fileExtension
}
# Main Processing
nsec=1
while [[ "$(date +%H%M)" -lt 2329 ]]
do
for fileName in /gers/nurev/datafiles/[Uu][Pp][Ll][Oo][Aa][Dd].[0-9][0-9][0-9
][0-9]
do
fileExtension=${fileName#*.}
is_file_arrived "$fileName" && nsec=1 && processFile $fileName $fileExtension
done
sleep $nsec
case $nsec in
1) nsec=15;;
15) nsec=45;;
45) nsec=90;;
90) nsec=300;;
300) nsec=600;;
600) nsec=900;;
*) nsec=1800;;
esac
done
... Ich möchte prüfen, ob eine Datei in / Gers / genret / tmp / poll_ ####. txt (wo "####" ist die Variable $ FileExtension. Ich glaube, dass die Datei, sollte in der "Main Processing", bevor es an die Datei an den "is_file_arrived"-Funktion? I'f gibt es einen "poll_ ####. txt"-Datei vorliegenden Ich möchte das Skript, um auf die nächste Datei und schauen Sie auf es zu einem späteren Zeitpunkt erneut. Dies würde verhindern, dass zwei Dateien des gleichen Typs Verarbeitung in der gleichen Zeit. Ich denke so etwas wie eine "Wenn-dann"?