IF para nao executar a funcao

1. IF para nao executar a funcao

Ibrahim
Orra_ibrahim

(usa Ubuntu)

Enviado em 30/06/2016 - 09:29h

Senhores , estou desenvolvendo um script shell com ajuda do forum porem surgiu uma duvida e nao consigo realizar validação do diretorio nem q a "porra", preciso de um IF (caso tenha arquivo no diretorio execute algo ) Else (só escreva algo )

é um While infinito que fica realizando validação da dos arquivos existentes no diretorio.

Exemplo do script abaixo:
TEMPO="600" # Quanto tempo parado? 20m = 1200 seg

DAT=`date +%Y%m%d`
DIR="/spt/UL/G311/$DAT"


ESPERA="30"

ESCREVE="/dev/stdout" #
item=$(ls -lR "$DIR" | grep '^-' | wc -l )

while true
do
AGORA="`date "+%s"`"
for d in $DIR
do
for a in $d/*
do
ESTADO="`stat -c "%X" $a`"
PASSOU="$(( $AGORA - $ESTADO ))"
if [ $PASSOU -gt $TEMPO ]
then
acao $a $PASSOU

else [$TEMP -gt $PASSOU]

echo "Arquivos recepcionados recentemente" >> /home/siscom/$DAT.log

else [$item != ""] > ESSA VALIDAÇÃO NAO FUNCIONA $ITEM É VALOR RETORNADO DO COMANDO ACIMA<
echo "Nao existe arquivos pendentes para transmissao" >> /home/siscom/$DAT.log

fi
done
done
sleep $ESPERA
done



ME AJUDEM GALERA, NAO CONHEÇO MTO DE SHELL


  


2. Tentei validar o diretorio antes mesmo acho q ficou melhor assim

Ibrahim
Orra_ibrahim

(usa Ubuntu)

Enviado em 30/06/2016 - 09:40h

while true
do
if [ -z $DIR] ( retorna erro de MISSING NESTA LINHA )
then

echo"testeeeeeeeeeeeeeeeeeeeeeeeee"

else
AGORA="`date "+%s"`"
for d in $DIR
do
for a in $d/*
do
ESTADO="`stat -c "%X" $a`"
PASSOU="$(( $AGORA - $ESTADO ))"
if [ $PASSOU -gt $TEMPO ]
then
acao $a $PASSOU

fi
done
done
sleep $ESPERA
fi
done


3. Re: IF para nao executar a funcao

thinomar
thinomar

(usa Linux Mint)

Enviado em 30/06/2016 - 10:41h

No primeiro bloco de código (que está na pergunta), substitua:
else [$item != ""] 

Por
elif [$item -gt 0] 


No segundo bloco de código (que está no seu comentário), eu não entendi muito bem. Você quer ver se o diretório está vazio? Se sim, substitua:
if [ -z $DIR] 

Por
if [ ! "$(ls -A "$DIR")" ] 

--
-I've been talking to the main computer
-And...?
-It hates me


4. Re: IF para nao executar a funcao

Ibrahim
Orra_ibrahim

(usa Ubuntu)

Enviado em 30/06/2016 - 10:53h

while true
41 do
42 if [ ! "$(ls -A "$DIR")"] (continua dand erro nessa porcaria )
43 then
44
45 echo "testeeeeeeeeeeeeeeeeeeeeeeeee"
46
47 else
48
49 AGORA="`date "+%s"`"
50 for d in $DIR
51 do
52 for a in $d/*
53 do
54 ESTADO="`stat -c "%X" $a`"
55 PASSOU="$(( $AGORA - $ESTADO ))"
56 if [ $PASSOU -gt $TEMPO ]
57 then
58 acao $a $PASSOU
59
60 fi
61 done
62 done


no lugar da linha 42 tentei tbm

if [ -z "$(ls "$DIR")"] (ele validou OK porem quando tem arquivo no diretorio ele falha MISSING e nao entra no ELSE)


5. Re: IF para nao executar a funcao

thinomar
thinomar

(usa Linux Mint)

Enviado em 30/06/2016 - 11:15h

Deixa assim:
 if [ ! "$(ls -A "$DIR")" ] 

E não assim:
 if [ ! "$(ls -A "$DIR")"] 

Deixa com o espaço no final (entre a última aspas e o último colchete). Provavelmente o "missing" que você ta falando é o "missing ']'", então creio que seja isso.
--
-I've been talking to the main computer
-And...?
-It hates me


6. Re: IF para nao executar a funcao

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 30/06/2016 - 18:08h

Orra_ibrahim escreveu:
Senhores , estou desenvolvendo um script shell com ajuda do forum porem surgiu uma duvida e nao consigo realizar validação do diretorio nem q a "porra", preciso de um IF (caso tenha arquivo no diretorio execute algo ) Else (só escreva algo )
é um While infinito que fica realizando validação da dos arquivos existentes no diretorio.
ME AJUDEM GALERA, NAO CONHEÇO MTO DE SHELL

-----------------------------------------------------------------------------------
Boa noite ibrahim.
Veja se é +- isso que precisa:
#INICIO
#!/bin/bash

################################
## MONITORA CONTEúDO De $DIR ##
## V:00 Junho/2016 ##
## Marcelo Oliver ##
## marceloliver[@]gmail[Dot]com ##
################################

DIRC="$PWD" export DIRC
ARQ01=$DIRC/LS-TXT.temp
AGR=$(date +"%Y/%m/%d")
DIR="$HOME"
COLS=$(tput cols)
DATA="date +"%H:%M:%S:%N""
SED="sed -r "s/.{6}$//""
SLEEP="sleep 600"

VERIFICA() {
VARREDIR
if [ -s "$ARQ01" ];then
printf "\n $(LINHA) \n $AGR - $($DATA|$SED)\n MONITORAMENTO do DIRETóRIO:\n $DIR\n $(LINHA)\n"
GETLINE
else
printf "\n $(LINHA) $AGR - $($DATA|$SED)\n NÃO Há ARQUIVOS EM:\n $DIR\n $(LINHA)\n"
sleep 1 ; VERIFICA
fi
}

VARREDIR() { ls -lR "$DIR" | grep '^-' > $ARQ01 ; }

GETLINE() {
TM1=$($DATA|$SED) ; VARREDIR
NR01=$(awk -F"\n" 'END {print NR}' $ARQ01)
$SLEEP
TM2=$($DATA|$SED) ; VARREDIR
NR02=$(awk -F"\n" 'END {print NR}' $ARQ01)
COMPARA
echo -e " $(LINHA)\n"
}

COMPARA(){
printf "\n $(LINHA)\n $AGR - $($DATA|$SED)\n TM1:$TM1 TM2:$TM2\n Arqs:$NR01 \t Arqs:$NR02"
if (($NR02==$NR01));then
printf "\n NãO HOUVE ALTERAÇãO EM $DIR"
else
printf "\n OCORRERAM ALTERAÇõES EM $DIR"
fi
sleep 1
VARREDIR;GETLINE
}

LINHA() { printf '%*s' "$((COLS/2))" '' | sed "s/ /*/g" ;echo; }

VERIFICA
#FIM


SAíDA:
**************************************** 
2016/06/30 - 15:09:52:191
MONITORAMENTO do DIRETóRIO:
/home/user
****************************************

****************************************
2016/06/30 - 15:09:58:219
TM1:15:09:52:195 TM2:15:09:58:205
Arqs:27 Arqs:28
OCORRERAM ALTERAÇõES EM /home/user
****************************************
2016/06/30 - 15:10:05:254
TM1:15:09:59:238 TM2:15:10:05:244
Arqs:28 Arqs:28
NãO HOUVE ALTERAÇãO EM /home/user
****************************************
****************************************
2016/06/30 - 15:10:12:295
TM1:15:10:06:267 TM2:15:10:12:284
Arqs:28 Arqs:29
OCORRERAM ALTERAÇõES EM /home/user
. . .


Para testar, "rodei" o comando abaixo em outro terminal:
for ((N=0;N<100;N++));do sleep 15;touch FILE_$N.txt;done 

E tirei os "0" de SLEEP="sleep 600" 

Funcionou como esperado.

É isso, espero que ajude....

E não esqueça . . . :)
---------------------------------------------------------------------------------
Se a resposta foi satisfatória e resolveu seu problema, marque-a como a MELHOR, dessa forma, ganho uns pontinhos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
---------------------------------------------------------------------------------

Abç.:
Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts