Enviado em 17/08/2020 - 19:52h
Boa noite,
#!/bin/bash
# DECLARAÇÃO: Variáveis Locais.
local=$3
arquivo=$2
MENSAGEM_USO="
Uso: $(basename "$0") [OPÇÕES]
DESCRIÇÃO:
Instala e gerência os programas instalado pelo código fonte.
Argumentos:
-i <nome.ext> <caminho> Instala o programa.
-h Mostra esta tela de ajuda e sai.
-l Lista os programas instalados.
-s <nome> Pesquisa os aquivos instalados.
-u <nome> Desinstala o programa.
-w Exibe os caminhos dos programas instalados.
-v Mostra a versão do programa e sai.
OBSERVAÇÕES:
Os argumentos -i necessitam que sejam expresso o
nome do arquivo junto com a extenção do arquivo, além
do caminho onde está localizado o arquivo.
USO:
installsrc -i leafpad-0.8.17.tar.gz /home/mac/Downloads/
Os argumentos -u necessitam que sejam expresso o
nome do arquivo.
USO:
installsrc -u leafpad
"
arq_caminho=" ###################
#
# Autor: Mac Brener - Skylen
# Local: /home/.programasrc/logs
# Data: $("date")
#
# DESCRIÇÃO:
# Arquivo para registro dos caminhos dos programas
# instalados. Utilizado para a desinstalação e outros
# funcionabilidades do installsrc.
#
#
###################
#
# <CAMINHO>
#
"
arq_programas=" ###################
#
# Autor: Mac Brener - Skylen
# Local: /home/.programasrc/logs
# Data: $("date")
#
# DESCRIÇÃO:
# Arquivo para registro dos nomes dos programas
# instalados. Utilizado para a desinstalação e outros
# funcionabilidades do installsrc.
#
#
###################
#
# <NOME>
#
"
nome="
#####################################################
PROGRAMA: ${nome_arquivo}
DATA: `date`
"
#Variáveis para verificar os arquivos.
install=INSTALL
make=Makefile
Configure=configure
# Variáveis para a desistalação.
programa=$(grep $arquivo /home/.programasrc/logs/caminho.log | cut -d"/" -f5)
caminho_duplicado=$(grep $arquivo /home/.programasrc/logs/caminho.log | uniq -d | cut -d"/" -f5)
# DECLARAÇÃO: Funções.
desinstalar(){
if test -z "${caminho_duplicado}"; then
if [ -d "/home/.programasrc/programas/${programa}" ]; then
cd /home/.programasrc/programas/${programa}
make uninstall && make clean
echo
echo -e "Programa desinstalado com sucesso!!"
sleep 1.7
clear
exit 0
else
echo -e "Programa não encontrado."
exit 1
fi
else
cd /home/.programasrc/programas/${caminho_duplicado}
make uninstall && make clean
echo
echo -e "Programa desinstalado com sucesso!!"
sleep 1.7
clear
exit 0
fi
}
instalar() {
if [ -e "/home/.programasrc/programas/${nome_arquivo}/${Configure}" ]; then
./configure && make && make clean && make install
echo
echo "Trabalho Concluido!!!!!"
sleep 1.7
clear
exit 0
else
make && make clean && make install
echo
echo "Trabalho Concluido!!!!!"
sleep 1.7
echo
clear
exit 0
fi
}
verificar_arquivos(){
cd /home/.programasrc/programas/${nome_arquivo}
echo "${nome}" >> /home/.programasrc/logs/programas.log
echo "${pasta_fonte}/${nome_arquivo}" >> /home/.programasrc/logs/caminho.log
clear
# -> Condicional verifica se os arquivos se encontra na pasta especificada.
if [ -e "${install}" ]; then
echo "Arquivo ${install} se encontra."
echo
sleep 1
instalar
elif [ -e "${Configure}" ]; then
echo "Arquivo ${Configure} se encontra."
echo
instalar
elif [ -e "${make}" ]; then
echo "Arquivo ${make} se encontra."
sleep 1
echo
instalar
else
echo "Arquivo inexistente."
sleep 1
xdg-open ${pasta_fonte}/${nome_arquivo} # -> Abre a pasta do programa.
clear
exit 1
fi
}
extrair(){
cd ${pasta_fonte}
# Variáveis para a comparação.
for pesquisa_arq in $(ls -1 *.{tar.gz,tar,tar.bz,tar.bz2,tar.xz,zip,tgz} 2>/dev/null); do
NC=$(awk -F'.' '{print NF}' <<< ${pesquisa_arq});
if ((NC>3));then
extencao=$(cut -d'.' -f$((NC-1))- <<< ${pesquisa_arq})
nome_arquivo=$(cut -d'.' -f1,-$((NC-2)) <<< ${pesquisa_arq})
else
nome_arquivo=$(cut -d'.' -f1 <<< ${pesquisa_arq})
extencao=$(cut -d'.' -f1- <<< ${pesquisa_arq})
fi
done
if [ "${extencao}" == "tar.gz" ]; then
tar -xzvf ${pesquisa_arq} -C /home/.programasrc/programas
rm ${pesquisa_arq}
echo
echo "Extração concluida!!!"
sleep 1
verificar_arquivos
elif [ "${extencao}" == "tgz" ]; then
tar -xzvf ${pesquisa_arq} -C /home/.programasrc/programas
rm ${pesquisa_arq}
echo
echo "Extração concluida!!!"
sleep 1
verificar_arquivos
elif [ "${extencao}" == "tar.bz" ]; then
tar -xjvf ${pesquisa_arq} -C /home/.programasrc/programas
rm ${pesquisa_arq}
echo
echo "Extração concluida!!!"
sleep 1
verificar_arquivos
elif [ "${extencao}" == "tar.bz2" ]; then
tar -jxvf ${pesquisa_arq} -C /home/.programasrc/programas
rm ${pesquisa_arq}
echo
echo "Extração concluida!!!"
sleep 1
verificar_arquivos
elif [ "${extencao}" == "tar.xz" ]; then
tar -xJvf ${pesquisa_arq} -C /home/.programasrc/programas
rm ${pesquisa_arq}
echo
echo "Extração concluida!!!"
sleep 1
verificar_arquivos
elif [ "${extencao}" == "zip" ]; then
cd /home/.programasrc/programas
unzip -v ${pesquisa_arq}
rm ${pesquisa_arq}
echo
echo "Extração concluida!!!"
sleep 1
verificar_arquivos
elif [ "${extencao}" == "tar" ]; then
tar -xvf ${pesquisa_arq} -C /home/.programasrc/programas
rm ${pesquisa_arq}
echo
echo "Extração concluida!!!"
sleep 1
verificar_arquivos
else
clear
echo "Ouve algum erro!!!"
echo
echo " :("
echo
exit 1
fi
}
copiar_arquivo(){
if ! [ -e ${pasta_fonte}/${arquivo} ]; then
cp -r ${local}/${arquivo} /home/.programasrc/fontes
extrair
else
echo -e "Arquivo existente!!"
echo -e "Començando extração..."
extrair
fi
}
# Função verifica a não exitência das pastas e arquivos.
verificar_dados(){
if [ `whoami` != 'root' ]; then
echo "Usuário root não está logado."
echo "Saindo..."
fi
# Variável ficará salva no arquivo .bashrc usado na desistalação.
# Condicinal verifica se não existe a variável.
if ! grep pasta_fonte /root/.bashrc >> /dev/null; then
echo "# Variáveis usadas para a execução do programa installsrc." >> /root/.bashrc
echo "# Mais informações digite no terminal: installsrc [ -h ]" >> /root/.bashrc
echo "export pasta_fonte=/home/.programasrc/fontes" >> /root/.bashrc
echo "Variável criada!"
fi
# Local ondes os programas instalados irão ficar.
# Variável ficará salva no arquivo .bashrc usado na desistalação.
# Condicinal verifica se não existe a variável.
if ! grep pasta_progrmas /root/.bashrc >> /dev/null; then
echo "export pasta_programas=/home/.programasrc/programas" >> /root/.bashrc
echo "Variável criada!"
fi
if [ ! -d "/home/.programasrc" ]; then
echo "Criando a pasta: programasrc"
sleep 0.7
mkdir -m 775 /home/.programasrc
fi
if [ ! -d "/home/.programasrc/programas" ]; then
echo "Criando a pasta: programas"
sleep 0.6
mkdir -m 775 /home/.programasrc/programas
fi
if [ ! -d "/home/.programasrc/fontes" ]; then
echo "Criando a pasta: fontes"
sleep 0.6
mkdir -m 775 /home/.programasrc/fontes
fi
if [ ! -d "/home/.programasrc/logs" ]; then
echo "Criando a pasta: logs"
sleep 0.6
mkdir -m 775 /home/.programasrc/logs
fi
if [ ! -e "/home/.programasrc/logs/programas.log" ]; then
echo "Criando a arquivo: programas.log"
sleep 0.7
echo "${arq_programas}" >> /home/.programasrc/logs/programas.log
fi
if [ ! -e "/home/.programasrc/logs/caminho.log" ]; then
echo "Criando a arquivo: caminho.log"
echo "${arq_caminho}" >> /home/.programasrc/logs/caminho.log
sleep 0.7
fi
if [ ! -e "/root/.bashrc" ]; then
echo "Criando a arquivo: bashrc"
sleep 0.7
fi
if ! [ -e ${pasta_fonte}/${arquivo} ]; then
cp -r ${local}/${arquivo} /home/.programasrc/fontes
extrair
else
echo -e "Arquivo existente!!"
echo -e "Començando extração..."
extrair
fi
}
###################
# Chama a ajuda.
if test -z "$1"; then
echo "${MENSAGEM_USO}"
exit 0
else
# Gerência os argumentos.
while test -z "$1"
do
case "$1" in
-i)
verificar_dados
;;
-h)
echo "${MENSAGEM_USO}"
exit 0
;;
-l)
clear
echo
cat /home/.programasrc/logs/programas.log
echo
exit 0
;;
-s)
clear
echo
grep ${arquivo} /home/.programasrc/logs/programas.log
echo
exit 0
;;
-u)
desinstalar
;;
-w)
clear
echo
cat /home/.programasrc/logs/caminho.log
echo
exit 0
;;
-v)
echo -n $(basename "$0")
# Extrai a versão diretamente dos cabeçalhos do programa
grep '^# Versão ' "$0" | tail -1 | cut -d : -f 1 | tr -d \#
exit 0
;;
*)
echo Opção inválida: "$1"
exit 1
;;
esac
done
fi