I would make a Frufru+ or - like, sorry if there are any mistakes, but I did in the race here.
But from what I understand, you can take advantage of the idea
#!/bin/bash
# Nome do script
name="meu_script"
# Diretório de log do mesmo
log_dir="/var/log/$name"
# Arquivo de log
log_file="/$log_dir/$name.log"
# Arquivo de log das instalações
log_install="/$log_dir/$name.apt"
# Pacotes que seram instalados
pkg_install="nginx mysql-server php-fpm php-mysql php-curl php-json php-mcrypt php-mbstring php-xml php-imagick git unzip"
# Nível de log 0="não gera log" 1="gera aquivo de log" 2="gera arquivo de log e saida no terminal" 3="debug"
registra=0
# Cria diretório de log caso não exista
if [[ ! -d $log_dir ]]; then
mkdir $log_dir
fi
# Debug
if [[ $registra -eq 3 ]]; then
set -x
fi
# Função de log
Log_apt() {
if [[ $registra -eq 1 ]]; then
echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1" >> $log_install
elif [[ $registra -eq 2 ]]; then
echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1" >> $log_install
echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1"
fi
}
Log() {
if [[ $registra -eq 1 ]]; then
echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1" >> $log_install
elif [[ $registra -eq 2 ]]; then
echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1" >> $log_install
echo -e "`date "+%h %d %H:%M:%S"` $HOSTNAME $name $1"
fi
}
# Cores
# Verde
c1() {
echo -e "\e[32;1m$1\e[m"
}
# Vermelho
c2() {
echo -e "\e[31;1m$1\e[m"
}
# Amarelo
c3() {
echo -e "\e[33;1m$1\e[m"
}
# Azul claro
c4() {
echo -e "\e[36;1m$1\e[m"
}
# Linha em branco
l1() {
echo -e " " >> $LogFile
}
# Loga
Log "`c3 "praparando o servidor web..."`"
Log "`c3 "Configurando idioma pt_BR"`"
# Função que será executada
cmd=$(localedef -c -i pt_BR -f UTF-8 pt_BR.UTF-8 2>&1)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
Log "`c2 "error"` $cmd"
else
Log "`c1 "sucesso"`"
fi
export LANG=pt_BR.UTF-8
# Loga
Log "`c3 "Alterando timezone para America/Sao_Paulo"`"
# Função que será executada
cmd=$(timedatectl set-timezone America/Sao_Paulo)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
Log "`c2 "error"` $cmd"
else
Log "`c1 "sucesso"`"
fi
# Esse for irá instalar todos os pacotes definido na variável $pkg_install
for i in $pkg_install; do
# Registra no arquivo de log de instalação
Log_apt "`c3 "apt-get install"` `c4 "$i"`"
# Loga
Log "`c3 "apt-get install"` `c4 "$i"`"
# Instala o pacote $i
apt-get install -y $i >> $log_install 2>&1
# Loga se a instalação foi bem ou mal sucedida
if [[ $? -ne 0 ]]; then
Log "`c1 "apt-get install"` sucesso ao instalar `c1 "$i"`"
else
Log "`c2 "apt-get install"` falha ao instalar `c2 "$i"`"
fi
done
# Loga
Log "`c3 "chown"` definindo www-data como owner do diretório /var/www"
# Função que será executada
cmd=$(chown -R www-data:www-data /var/www 2>&1)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
Log "`c2 "error"` $cmd"
else
Log "`c1 "sucesso"`"
fi
# Loga
Log "`c3 "reiniciando NGINX"`"
# Função que será executada
cmd=$(service nginx restart 2>&1)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
Log "`c2 "error"` $cmd"
else
Log "`c1 "sucesso"`"
fi
# Loga
Log "`c3 "reiniciando PHP-FPM"`"
# Função que será executada
cmd=$(service php7.0-fpm restart 2>&1)
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
if [[ $? -ne 0 ]]; then
Log "`c2 "error"` $cmd"
else
Log "`c1 "sucesso"`"
fi
# Loga
Log "`c3 "reiniciando PHP-FPM"`"
# Caso a função acima de algum erro, registra o erro que ocorreu no arquivo de log
# sem erro registra sucesso
cmd=$(service php7.0-fpm restart 2>&1)
if [[ $? -ne 0 ]]; then
Log "`c2 "error"` $cmd"
else
Log "`c1 "sucesso"`"
fi
# Loga
Log "`c3 "Ajustando configurações essenciais do MySQL"`"
# Espera
sleep 3
SENHA=1QAZxsw2 && echo -e "\n\n$SENHA\n$SENHA\n\nn\n\n" | mysql_secure_installation
Will the Code participate in any fashion show? : -) Jokes aside, it is very relative to this business of "elegant code", even more in bash, if it is already commented, spaced and organized, is enough, the rest is Fru-Fru.
– Sidon
kkkk. Forgive me for the word "elegant". I would actually like to try to leave the code but functional and practical, however, I’m out of ideas.
– Fábio Jânio
Suggestions: Write variable statements at the beginning of the script. Write a function with the proper name for each functional part of the script, so you won’t need comments. Implement a flag to enable a debug mode, and not redirect outputs to /dev/null. Enable outputs from stderr for an error file. If possible, do not leave your database password in cleartext.
– cemdorst