IF -e && -e -Não funciona

1. IF -e && -e -Não funciona

hauck
hauck

(usa Nenhuma)

Enviado em 12/10/2019 - 20:28h

Boa noite, este código abaixo é parte de um script maior. Na primeira execução é buscado onde os arquivos deste programa estão localizados e o caminho é salvo no arquivo '$DIR_log', o problema é que somente na primeira vez que este script é chamado passa desta verificação do local e quando é buscado os arquivos locais SH e MP3 aparece na tela a mensagem de erro "Um dos arquivos $FILE1 e $FILE2, necessários para a função de despertador/alarme não foi encontrado."
Sendo que os nomes dos arquivos SH e MP3 estão corretos e estão na pasta certa, minha dúvida é em relação ao IF da linha ' #Condição que verifica se os arquivos existem', não sei como escrever este IF para verificar se os dois arquivos existem e somente se os dois existem continua na próxima condição que faz a verificação de pacotes instalados.


verificarDEPS(){

DEPS="dialog" #...
FILE1="mp3.mp3"
FILE2="sh.sh"
DIR="outputActions"
DIR_log="/home/$USER/.outputActions_DIR.txt"
#
if [ -e $DIR_log ]; then
LocalPrograma=$(cat $DIR_log)
#
else #Se o arquivo não existe, é executado o código abaixo
cat <<EOF
O diretório em que este script está localizado será salvo no arquivo $DIR_log
Se mover este script para outra pasta, apague este arquivo.
A localização será verificada apenas uma vez, tenha paciência.
EOF
find /home/$USER -name $DIR > $DIR_log
fi
#
# && = -a
if [ -e "$LocalPrograma/$FILE1" ] && [ -e "$LocalPrograma/$FILE2" ]; then #Condição que verifica se os arquivos existem
echo
#CONTINUA VERIFICAÇÃO DE DEPENDÊNCIAS NO PRÓXIMO IF, OS ARQUIVOS LOCAIS SÃO BUSCADOS PRIMEIRO
else
echo "Um dos arquivos $FILE1 e $FILE2, necessários para a função de despertador/alarme não foi encontrado."
echo;exit
fi
#
# dependências instaladas?
if ! which $DEPS 1>/dev/null 2>&1; then
printf '%b' "Uma dependência pode estar faltando: \n"
echo "$DEPS"
exit 1
else
echo "Todas as dependências necessárias para a execução deste programa foram encontradas." ; sleep 3
echo "aqui é iniciando a função 'principal' - o menu do script em dialog"
fi
}
verificarDEPS



  


2. Re: IF -e && -e -Não funciona

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/10/2019 - 23:40h


hauck escreveu:

Boa noite, este código abaixo é parte de um script maior. Na primeira execução é buscado onde os arquivos deste programa estão localizados e o caminho é salvo no arquivo '$DIR_log', o problema é que somente na primeira vez que este script é chamado passa desta verificação do local e quando é buscado os arquivos locais SH e MP3 aparece na tela a mensagem de erro "Um dos arquivos $FILE1 e $FILE2, necessários para a função de despertador/alarme não foi encontrado."
Sendo que os nomes dos arquivos SH e MP3 estão corretos e estão na pasta certa, minha dúvida é em relação ao IF da linha ' #Condição que verifica se os arquivos existem', não sei como escrever este IF para verificar se os dois arquivos existem e somente se os dois existem continua na próxima condição que faz a verificação de pacotes instalados.


verificarDEPS(){

DEPS="dialog" #...
FILE1="mp3.mp3"
FILE2="sh.sh"
DIR="outputActions"
DIR_log="/home/$USER/.outputActions_DIR.txt"
#
if [ -e $DIR_log ]; then
LocalPrograma=$(cat $DIR_log)
#
else #Se o arquivo não existe, é executado o código abaixo
cat <<EOF
O diretório em que este script está localizado será salvo no arquivo $DIR_log
Se mover este script para outra pasta, apague este arquivo.
A localização será verificada apenas uma vez, tenha paciência.
EOF
find /home/$USER -name $DIR > $DIR_log
fi
#
# && = -a
if [ -e "$LocalPrograma/$FILE1" ] && [ -e "$LocalPrograma/$FILE2" ]; then #Condição que verifica se os arquivos existem
echo
#CONTINUA VERIFICAÇÃO DE DEPENDÊNCIAS NO PRÓXIMO IF, OS ARQUIVOS LOCAIS SÃO BUSCADOS PRIMEIRO
else
echo "Um dos arquivos $FILE1 e $FILE2, necessários para a função de despertador/alarme não foi encontrado."
echo;exit
fi
#
# dependências instaladas?
if ! which $DEPS 1>/dev/null 2>&1; then
printf '%b' "Uma dependência pode estar faltando: \n"
echo "$DEPS"
exit 1
else
echo "Todas as dependências necessárias para a execução deste programa foram encontradas." ;
sleep 3
echo "aqui é iniciando a função 'principal' - o menu do script em dialog"
fi
}
verificarDEPS


Boa noite hauck .
O problema não está no "IF", e sim na definição da var
LocalPrograma=$(cat $DIR_log)
A mesma é definida com o conteúdo vazio de "/home/$USER/.outputActions_DIR.txt".

Qual é a real intenção com o comando:
find /home/$USER -name $DIR > $DIR_log 


Dicas:
Para verificar arquivos/diretórios, faça:

FILES_DIRS=(mp3.mp3 sh.sh outputActions "$PWD/.outputActions_DIR.txt") #Var do tipo "array"
for arq in ${FILES_DIRS[@]};do
[ -e $arq ] && echo $arq ok || echo $arq nok;
done

#Dessa forma você sabe qual é o faltante.
O mesmo pode ser feito para testar se o "comando" existe, caso tenha que verificar muitos....
Obviamente, alterando o "teste" para:

APPS=(awk sed gawk grep dialog zenity cpupower);
for CMD in ${APPS[@]};do
[ $(which $CMD) ] && echo $CMD Ok || echo $CMD Nok;
done

Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver


3. Re: IF -e && -e -Não funciona

hauck
hauck

(usa Nenhuma)

Enviado em 13/10/2019 - 01:12h

Bom dia.
O comando find vai pesquisar o caminho completo da pasta onde os arquivos estão a partir da /home do usuário e LocalPrograma vai pegar esse caminho que foi salvo pelo find no arquivo oculto .outputActions_DIR.txt pelo comando cat
Do jeito que eu estava pensando, preciso ter o caminho completo de onde os arquivos estão, não apenas verificar se os arquivos e pastas existem,
Pode me explicar porque o conteúdo vazio do LocalPrograma?
Depois da primeira execução tem esse erro mas o diretório dos arquivos foi salvo no arquivo, se executo o script de novo ele lê o arquivo que ficou salvo na /home/$USER e continua normalmente.
Veja o código completo: http://dontpad.com/hauck

msoliver escreveu:
hauck escreveu:

Boa noite, este código abaixo é parte de um script maior. Na primeira execução é buscado onde os arquivos deste programa estão localizados e o caminho é salvo no arquivo '$DIR_log', o problema é que somente na primeira vez que este script é chamado passa desta verificação do local e quando é buscado os arquivos locais SH e MP3 aparece na tela a mensagem de erro "Um dos arquivos $FILE1 e $FILE2, necessários para a função de despertador/alarme não foi encontrado."
Sendo que os nomes dos arquivos SH e MP3 estão corretos e estão na pasta certa, minha dúvida é em relação ao IF da linha ' #Condição que verifica se os arquivos existem', não sei como escrever este IF para verificar se os dois arquivos existem e somente se os dois existem continua na próxima condição que faz a verificação de pacotes instalados.


verificarDEPS(){

DEPS="dialog" #...
FILE1="mp3.mp3"
FILE2="sh.sh"
DIR="outputActions"
DIR_log="/home/$USER/.outputActions_DIR.txt"
#
if [ -e $DIR_log ]; then
LocalPrograma=$(cat $DIR_log)
#
else #Se o arquivo não existe, é executado o código abaixo
cat <<EOF
O diretório em que este script está localizado será salvo no arquivo $DIR_log
Se mover este script para outra pasta, apague este arquivo.
A localização será verificada apenas uma vez, tenha paciência.
EOF
find /home/$USER -name $DIR > $DIR_log
fi
#
# && = -a
if [ -e "$LocalPrograma/$FILE1" ] && [ -e "$LocalPrograma/$FILE2" ]; then #Condição que verifica se os arquivos existem
echo
#CONTINUA VERIFICAÇÃO DE DEPENDÊNCIAS NO PRÓXIMO IF, OS ARQUIVOS LOCAIS SÃO BUSCADOS PRIMEIRO
else
echo "Um dos arquivos $FILE1 e $FILE2, necessários para a função de despertador/alarme não foi encontrado."
echo;exit
fi
#
# dependências instaladas?
if ! which $DEPS 1>/dev/null 2>&1; then
printf '%b' "Uma dependência pode estar faltando: \n"
echo "$DEPS"
exit 1
else
echo "Todas as dependências necessárias para a execução deste programa foram encontradas." ;
sleep 3
echo "aqui é iniciando a função 'principal' - o menu do script em dialog"
fi
}
verificarDEPS


Boa noite hauck .
O problema não está no "IF", e sim na definição da var
LocalPrograma=$(cat $DIR_log)
A mesma é definida com o conteúdo vazio de "/home/$USER/.outputActions_DIR.txt".

Qual é a real intenção com o comando:
find /home/$USER -name $DIR > $DIR_log 


Dicas:
Para verificar arquivos/diretórios, faça:

FILES_DIRS=(mp3.mp3 sh.sh outputActions "$PWD/.outputActions_DIR.txt") #Var do tipo "array"
for arq in ${FILES_DIRS[@]};do
[ -e $arq ] && echo $arq ok || echo $arq nok;
done

#Dessa forma você sabe qual é o faltante.
O mesmo pode ser feito para testar se o "comando" existe, caso tenha que verificar muitos....
Obviamente, alterando o "teste" para:

APPS=(awk sed gawk grep dialog zenity cpupower);
for CMD in ${APPS[@]};do
[ $(which $CMD) ] && echo $CMD Ok || echo $CMD Nok;
done

Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver





4. Re: IF -e && -e -Não funciona

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/10/2019 - 02:35h


[quote]hauck escreveu:

Bom dia.
O comando find vai pesquisar o caminho completo da pasta onde os arquivos estão a partir da /home do usuário e LocalPrograma vai pegar esse caminho que foi salvo pelo find no arquivo oculto .outputActions_DIR.txt pelo comando cat
Do jeito que eu estava pensando, preciso ter o caminho completo de onde os arquivos estão, não apenas verificar se os arquivos e pastas existem,
Pode me explicar porque o conteúdo vazio do LocalPrograma?
Depois da primeira execução tem esse erro mas o diretório dos arquivos foi salvo no arquivo, se executo o script de novo ele lê o arquivo que ficou salvo na /home/$USER e continua normalmente.
Veja o código completo: http://dontpad.com/hauck

[quote]msoliver escreveu:
[quote]hauck escreveu:

Boa noite, este código abaixo é parte de um script maior. Na primeira execução é buscado onde os arquivos deste programa estão localizados e o caminho é salvo no arquivo '$DIR_log', o problema é que somente na primeira vez que este script é chamado passa desta verificação do local e quando é buscado os arquivos locais SH e MP3 aparece na tela a mensagem de erro "Um dos arquivos $FILE1 e $FILE2, necessários para a função de despertador/alarme não foi encontrado."
Sendo que os nomes dos arquivos SH e MP3 estão corretos e estão na pasta certa, minha dúvida é em relação ao IF da linha ' #Condição que verifica se os arquivos existem', não sei como escrever este IF para verificar se os dois arquivos existem e somente se os dois existem continua na próxima condição que faz a verificação de pacotes instalados.


verificarDEPS(){

DEPS="dialog" #...
FILE1="mp3.mp3"
FILE2="sh.sh"
DIR="outputActions"
DIR_log="/home/$USER/.outputActions_DIR.txt"
#
if [ -e $DIR_log ]; then
LocalPrograma=$(cat $DIR_log)
#
else #Se o arquivo não existe, é executado o código abaixo
cat <<EOF
O diretório em que este script está localizado será salvo no arquivo $DIR_log
Se mover este script para outra pasta, apague este arquivo.
A localização será verificada apenas uma vez, tenha paciência.
EOF
find /home/$USER -name $DIR > $DIR_log
fi
#
# && = -a
if [ -e "$LocalPrograma/$FILE1" ] && [ -e "$LocalPrograma/$FILE2" ]; then #Condição que verifica se os arquivos existem
echo
#CONTINUA VERIFICAÇÃO DE DEPENDÊNCIAS NO PRÓXIMO IF, OS ARQUIVOS LOCAIS SÃO BUSCADOS PRIMEIRO
else
echo "Um dos arquivos $FILE1 e $FILE2, necessários para a função de despertador/alarme não foi encontrado."
echo;exit
fi
#
# dependências instaladas?
if ! which $DEPS 1>/dev/null 2>&1; then
printf '%b' "Uma dependência pode estar faltando: \n"
echo "$DEPS"
exit 1
else
echo "Todas as dependências necessárias para a execução deste programa foram encontradas." ;
sleep 3
echo "aqui é iniciando a função 'principal' - o menu do script em dialog"
fi
}
verificarDEPS

Bom dia hauck.
O comando:
find /home/$USER -name $DIR > $DIR_log
Não pega o diretório onde o script está sendo executado,
pega o caminho completo de $DIR, que é:
/home/user/outputActions
Para pegar o diretório onde esta executando o script, use a var:
$PWD
Ou o comando:
pwd
Reveja a lógica, não há necessidade das vars:
"LocalPrograma", "$DIR_log[\b] e [b]$DIR"
Fiz uns testes, de uma verificada:
#!/bin/bash
linha=" ------------------------- ------------------------- "
verificarDEPS(){
ERRO=0;
local DEPS=(awk sed grep zenity find) #usei esse comandos para testar aqui....
FILE=(tico-tico.mp3 despertador.sh) #Var do tipo "array"
local MENSAGEM="O diretório em que este script está localizado será salvo no arquivo $DIR_log
Se mover este script para outra pasta, apague este arquivo.
A localização será verificada apenas uma vez, tenha paciência."

for arq in ${FILE[@]};do
if [ ! -e $arq ];then
echo "O arquivo $arq necessário para a função de despertador/alarme não foi encontrado.";exit 0;
fi
done

for CMD in ${DEPS[@]};do
[ $(which $CMD) ] && echo -e "\e[32;1m [$CMD Okay]\e[m" || { echo -e "\e[31;1m [$CMD Not Okay] \e[m";let ERRO++;}
done
#Testa se faltou algun comando.
if (($ERRO==0));then
echo -e "\n$linha\n Todas as dependências necessárias para a execução\n\
deste programa foram encontradas. \n\
Iniciando a função 'principal' - Menu do script em dialog\n$linha";
sleep 3;principal;
else
echo -e "\n$linha\n\e[31;1m Faça a instalação dos comandos que faltam, saindo. . .\e[m\n$linha";
exit 0;
fi
}

principal(){
echo -e "\n$linha\n Testando\nFUNCTION PRINCIPAL\n$linha"
}

verificarDEPS

Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


5. Re: IF -e && -e -Não funciona

hauck
hauck

(usa Nenhuma)

Enviado em 14/10/2019 - 13:28h

Boa tarde, estou testando.
O problema do pwd é que ele pega o diretório em que o usuário está e não o do arquivo.
Se eu executar o script chamando o caminho completo dele ou usar como um alias definido no bashrc ele vai sempre retornar o erro de arquivo não encontrado.
Queria não precisar editar o código e colocar o caminho para busca ou estar dentro da pasta do script, que não está localizado na home.
Deveria apenas mostrar este erro se o nome da pasta onde os arquivos estão e o nome dos arquivos for alterado para outro que não está no código ou forem apagados.
Por isso pensei em usar o find, o seu código com o for funciona, mas com o mesmo efeito que um pwd.
Talvez eu não tenha dito algo de forma clara aqui no post.
Um tempo atrás eu formatava minha máquina direto testando distros.

pwd: /home/hauck
O arquivo tw.mp3 necessário para a função de despertador/alarme não foi encontrado.


6. Re: IF -e && -e -Não funciona

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/10/2019 - 16:23h


hauck escreveu:

Boa tarde, estou testando.
O problema do pwd é que ele pega o diretório em que o usuário está e não o do arquivo.
Se eu executar o script chamando o caminho completo dele ou usar como um alias definido no bashrc ele vai sempre retornar o erro de arquivo não encontrado.
Queria não precisar editar o código e colocar o caminho para busca ou estar dentro da pasta do script, que não está localizado na home.
Deveria apenas mostrar este erro se o nome da pasta onde os arquivos estão e o nome dos arquivos for alterado para outro que não está no código ou forem apagados.
Por isso pensei em usar o find, o seu código com o for funciona, mas com o mesmo efeito que um pwd.
Talvez eu não tenha dito algo de forma clara aqui no post.
Um tempo atrás eu formatava minha máquina direto testando distros.

pwd: /home/hauck
O arquivo tw.mp3 necessário para a função de despertador/alarme não foi encontrado.

Boa tarde.
Em qual diretório esta o script?
Onde estão $FILE1 e $FILE2?


Att.: Marcelo Oliver


7. Re: IF -e && -e -Não funciona

hauck
hauck

(usa Nenhuma)

Enviado em 14/10/2019 - 16:33h

/home/hauck/github/doc/Linux/shellScript.sh/outputActions
Todos os arquivos estão na mesma pasta

msoliver escreveu:
hauck escreveu:

Boa tarde, estou testando.
O problema do pwd é que ele pega o diretório em que o usuário está e não o do arquivo.
Se eu executar o script chamando o caminho completo dele ou usar como um alias definido no bashrc ele vai sempre retornar o erro de arquivo não encontrado.
Queria não precisar editar o código e colocar o caminho para busca ou estar dentro da pasta do script, que não está localizado na home.
Deveria apenas mostrar este erro se o nome da pasta onde os arquivos estão e o nome dos arquivos for alterado para outro que não está no código ou forem apagados.
Por isso pensei em usar o find, o seu código com o for funciona, mas com o mesmo efeito que um pwd.
Talvez eu não tenha dito algo de forma clara aqui no post.
Um tempo atrás eu formatava minha máquina direto testando distros.

pwd: /home/hauck
O arquivo tw.mp3 necessário para a função de despertador/alarme não foi encontrado.

Boa tarde.
Em qual diretório esta o script?
Onde estão $FILE1 e $FILE2?


Att.: Marcelo Oliver









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts