From 55ac6d6c41e81570fd7032944ab7c7ae984290ed Mon Sep 17 00:00:00 2001 From: viniciusalopes Date: Fri, 13 Dec 2019 19:03:34 -0300 Subject: [PATCH 01/14] v1.0.1 --- LICENSE | 0 README.md | 0 Shell-Base | 20 +++++++++++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 Shell-Base diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/Shell-Base b/Shell-Base old mode 100644 new mode 100755 index f31b1b5..a21a0c8 --- a/Shell-Base +++ b/Shell-Base @@ -6,13 +6,15 @@ # HOMEPAGE : https://slackjeff.github.io # DATA-DE-CRIAÇÃO : 2018-03-26 # PROGRAMA : Shell-Base -# VERSÃO : 1.0.0 +# VERSÃO : 1.0.1 # LICENÇA : GPL3 # PEQUENA-DESCRIÇÃO : Programa para criação de template, deixe tudo organizado # como deve ser! # Seus programas serão mais profissionais com o Shell-Base. # CHANGELOG : # +# 2019-12-12 - Vovolinux +# - Incluída a verificação de r00t como default #------------------------------------------------------------------------------| @@ -390,7 +392,17 @@ cat << EOF > "${template}.${interpretador}" #----------------------------------- FUNÇÕES ----------------------------------> # # Funções vão aqui! -# + +# Verifica se o script está sendo executado como r00t. +is_root() +{ + # é root? + [ "$UID" -ne "0" ] && { + printf '%b' "Execute como r00t.\n" + exit 1 + } +} + #--------------------------------- FIM-FUNÇÕES --------------------------------< @@ -398,7 +410,9 @@ cat << EOF > "${template}.${interpretador}" #---------------------------------- TESTES ------------------------------------> # # Testes iniciais do seu programa vão neste bloco. -# + +is_root + #--------------------------------- FIM-TESTES ---------------------------------< # Programa começa aqui :) From 08c23d1d1e6a53d82d02d4faaa4911ff1c71b271 Mon Sep 17 00:00:00 2001 From: viniciusalopes Date: Fri, 13 Dec 2019 19:51:48 -0300 Subject: [PATCH 02/14] v1.0.1 --- Shell-Base | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/Shell-Base b/Shell-Base index a21a0c8..d16667b 100755 --- a/Shell-Base +++ b/Shell-Base @@ -13,8 +13,11 @@ # Seus programas serão mais profissionais com o Shell-Base. # CHANGELOG : # -# 2019-12-12 - Vovolinux -# - Incluída a verificação de r00t como default +# 2019-12-13 - Vovolinux +# - Incluída a verificação de r00t como default para os templates criados. +# - Incluída a variavel 'extensao' para permitir a criação de scripts sem uma +# extensão ou com uma extensão diferente da variável 'interpretador'. +# - Alteração para permissão de execução do script criado para 755. #------------------------------------------------------------------------------| @@ -362,9 +365,14 @@ base(){ # A base de todo o programa se encontra aqui # Caso queira modificar, não esqueça de adicionar # tambem no vetor. - - -cat << EOF > "${template}.${interpretador}" + + +# Verifica se a extensão foi informada, para incluir no nome do arquivo criado. +if [[ "${extensao}" != "" ]]; then + template="${template}.${extensao}" +fi + +cat << EOF > "${template}" #!/usr/bin/env $interpretador # Template orgulhosamente criado por (Shell-Base) @@ -397,7 +405,7 @@ cat << EOF > "${template}.${interpretador}" is_root() { # é root? - [ "$UID" -ne "0" ] && { + [[ "\$UID" -ne "0" ]] && { printf '%b' "Execute como r00t.\n" exit 1 } @@ -420,16 +428,23 @@ is_root EOF } +# Permissão para execução do script criado +permissao() +{ + printf %b "\n" + chmod 755 "${template}" -v + printf %b "\n" +} criar() { data=$(date "+%d/%m/%Y às %H:%M") # Vetor contendo o questionario que será passado para o usuario. - informacoes=("autor" "e_mail" "homepage" "nome_do_programa" "interpretador" "versao" "licenca" "pequena_descricao") + informacoes=("autor" "e_mail" "homepage" "nome_do_programa" "extensao" "interpretador" "versao" "licenca" "pequena_descricao") local texto="${vermelho}Preencha todos os dados corretamente! Assim você não perde seu tempo depois. -O arquivo gerado terá o nome ${branco}template.INTERPRETADOR${fecha} ${vermelho}no diretório atual.\n\n${fecha}" +O arquivo gerado terá o nome ${branco}template.EXTENSAO${fecha} ${vermelho}no diretório atual.\n\n${fecha}" printf %b "$texto" for info in "${informacoes[@]}"; do @@ -441,7 +456,8 @@ O arquivo gerado terá o nome ${branco}template.INTERPRETADOR${fecha} ${vermelho # Chamando e testando a função para criar template de acordo # com os dados passados. if base; then - printf %b "${verde}Concluído com sucesso.\nArquivo gerado: ${template}.${interpretador}${fecha}\n" + permissao + printf %b "${verde}Concluído com sucesso.\nArquivo gerado: ${template}${fecha}\n" exit 0 else printf %b "${vermelho}Não consegui criar o arquivo, tente novamente...\n${fecha}" From 9fcfd92e8cf5cb0651b266fd7027ae0984c59b61 Mon Sep 17 00:00:00 2001 From: viniciusalopes Date: Fri, 13 Dec 2019 20:00:52 -0300 Subject: [PATCH 03/14] Ops --- Shell-Base | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shell-Base b/Shell-Base index d16667b..f8911c8 100755 --- a/Shell-Base +++ b/Shell-Base @@ -318,7 +318,7 @@ STATUS DE SÁIDA! fi -TESTE COM CONCIENCIA! +TESTE COM CONSCIENCIA! No interpretador bash não é correto fazer testes neste formato [ teste ], sim! se você não está usando o bourne shell "sh" como interpretador prefira utilizar o padrão bash [[ teste ]]. From 4aa8d10330c66b03211cfb5adfce0ec50f12626a Mon Sep 17 00:00:00 2001 From: Viniciusalopes Date: Sat, 25 Apr 2020 15:02:59 -0300 Subject: [PATCH 04/14] =?UTF-8?q?#=20CHANGELOG=20:=20#=202020-04-25=20-=20?= =?UTF-8?q?Vovolinux=20#=20-=20Criado=20o=20vetor=20contendo=20o=20questio?= =?UTF-8?q?n=C3=A1rio=20que=20ser=C3=A1=20exibido=20para=20o=20usu=C3=A1ri?= =?UTF-8?q?o.=20#=20-=20Alterada=20a=20fun=C3=A7=C3=A3o=20criar()=20para?= =?UTF-8?q?=20exibir=20o=20question=C3=A1rio.=20#=20-=20Vetor=20'informaco?= =?UTF-8?q?es'=20movido=20para=20a=20sess=C3=A3o=20---=20VARI=C3=81VEIS=20?= =?UTF-8?q?---=20do=20script.=20#=20-=20Revis=C3=A3o=20de=20ortografia=20e?= =?UTF-8?q?=20gram=C3=A1tica.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shell-Base | 304 +++++++++++++++++++++++++++++------------------------ 1 file changed, 165 insertions(+), 139 deletions(-) diff --git a/Shell-Base b/Shell-Base index f8911c8..412ab30 100755 --- a/Shell-Base +++ b/Shell-Base @@ -4,14 +4,19 @@ #-----------HEADER-------------------------------------------------------------| # AUTOR : Jefferson Rocha # HOMEPAGE : https://slackjeff.github.io -# DATA-DE-CRIAÇÃO : 2018-03-26 +# DATA DE CRIAÇÃO : 2018-03-26 # PROGRAMA : Shell-Base -# VERSÃO : 1.0.1 +# VERSÃO : 1.0.2 # LICENÇA : GPL3 -# PEQUENA-DESCRIÇÃO : Programa para criação de template, deixe tudo organizado +# PEQUENA DESCRIÇÃO : Programa para criação de template, deixe tudo organizado # como deve ser! # Seus programas serão mais profissionais com o Shell-Base. # CHANGELOG : +# 2020-04-25 - Vovolinux +# - Criado o vetor contendo o questionário que será exibido para o usuário. +# - Alterada a função criar() para exibir o questionário. +# - Vetor 'informacoes' movido para a sessão --- VARIÁVEIS --- do script. +# - Revisão de ortografia e gramática. # # 2019-12-13 - Vovolinux # - Incluída a verificação de r00t como default para os templates criados. @@ -22,8 +27,21 @@ #--------------------------------- VARIÁVEIS ----------------------------------> + +# Nome do template que será criado (Ex.: nome_do_programa.extensao) template="template" +# Data atual +data=$(date "+%d/%m/%Y às %H:%M") + +# Vetor contendo o questionário que será passado para o usuário. +# Caso queira modificar, não esqueça de adicionar tambem no vetor 'questionario'. +informacoes=("autor" "e_mail" "homepage" "nome_do_programa" "extensao" "interpretador" "versao" "licenca" "pequena_descricao") + +# Vetor contendo o questionário que será exibido para o usuário. +# Caso queira modificar, não esqueça de adicionar tambem no vetor 'informacoes'. +questionario=("Autor" "E-mail" "Homepage" "Nome do programa" "Extensao" "Interpretador" "Versão" "Licença" "Pequena descrição") + # Colorindo a sua vida. fecha="\033[m" verde="\033[32;1m" @@ -40,48 +58,49 @@ dicas() cat | less << EOF INFORMAÇÃO - Você sabe o poder do Shell? espero que sim! Vou te passar algumas dicas valiosas + Você sabe do poder do Shell? Espero que sim! Vou te passar algumas dicas valiosas para deixar seu programa com um grande diferencial, afinal queremos criar programas e não scripts não é? Scripts são descartáveis... Programas não. VÁRIAVEIS DENTRO DE FUNÇÕES - Quando você criar uma váriavel dentro de uma função utilize sempre local na frente, + Quando você criar uma váriavel dentro de uma função utilize sempre 'local' na frente, você não quer sujar o sistema do usuário não é? - Utilizando o local na frente da váriavel, como o próprio nome sugere, vocẽ cria uma - váriavel local, o que é mais correto de se fazer! exemplos: - + Utilizando o 'local' na frente da váriavel, como o próprio nome sugere, vocẽ cria uma + váriavel local, o que é mais correto a se fazer! + + Exemplos: variavel=\$(printf %s "oi tudo bem?\n") ERRADO local variavel=\$(printf %s "oi tudo bem?\n") CORRETO ECHO OU PRINTF? - Prefira utilizar printf ao invés do echo! - Vários testes foram feitos e todos eles apontaram que o printf é mais leve - que o echo. - O echo tem vários parâmetros que não são portáveis para outros dialetos do shell. - Então prefira e se acostume com o printf! ele é mais simples, poderoso e portável para - Todos os dialetos do Shell. + Prefira utilizar 'printf' ao invés do 'echo'! + Vários testes foram feitos e todos eles apontaram que o 'printf' é mais leve que o 'echo'. + O 'echo' tem vários parâmetros que não são portáveis para outros dialetos do Shell. + Então prefira e se acostume com o 'printf'! ele é mais simples, poderoso, e portável + para todos os dialetos do Shell. + Exemplos: echo -e "\033[31;1m OLÁ MUNDO! \033[m" ERRADO printf %b "\033[31;1m OLÁ MUNDO! \033[m" CORRETO NÃO USE PRINTF OU ECHO DESNECESSÁRIOS! - É de costume que muitos programadores usem echo e printf desnecessários! - Por exemplo para criar um simples menu, 10 echo antes e 10 echo depois para + É costume de muitos programadores usar 'echo' e 'printf' desnecessários! + Por exemplo: para criar um simples menu, 10 'echo' antes e 10 'echo' depois para deixar o script bem alinhado! - Isso é correto? sim... Se funciona não tem como dizer que é errado, porem é bom - sempre criar programas mais profissionais, principalmente quando você disponibiliza + Isso é correto? Sim... Se funciona não tem como dizer que é errado, porem é sempre + bom criar programas mais profissionais, principalmente quando você disponibiliza na internet! - Sempre use a boa prática e não faça nada na base do facão. - Sabemos que Shell e perfomace já não andam juntos! então prefira - não deixar seu programa mais lento. + Sempre use a boa prática e não faça nada na base do facão. Nada de Go-Horse! + Sabemos que Shell e perfomance já andam juntos! então prefira não deixar seu + programa mais lento. - MANEIRA LENTA + MANEIRA LENTA: echo echo @@ -95,7 +114,7 @@ NÃO USE PRINTF OU ECHO DESNECESSÁRIOS! echo echo - OPÇÕES MAIS RÁPIDAS + OPÇÕES MAIS RÁPIDAS: printf %b \\ "\n\n\nOI TUDO BEM? @@ -103,6 +122,8 @@ NÃO USE PRINTF OU ECHO DESNECESSÁRIOS! Agora com certeza estou deixando meu programa um pouco mais leve Não estou usando echo ou printf desnecessários!\n\n\n" + + cat << FECHA @@ -119,12 +140,12 @@ NÃO USE PRINTF OU ECHO DESNECESSÁRIOS! ESTÁ EM DÚVIDA? USE ASPAS. - Em Shell tudo é strings, prefira sempre usar aspas em tudo. - Além de aspas proteger sua string caso ela esteja nula, ficará mais agradavel + Em Shell tudo é string. Prefira sempre usar aspas em tudo. + Além das aspas protegerem sua string caso ela esteja nula, ficará mais agrádavel e mais profissional desta forma! Mas tome cuidado, alguns retornos de algumas váriaveis de ambiente podem - ser alteradas! como por exemplo a váriavel de ambiente $* - Sem aspas ela criar uma string em uma única linha, caso você use + ser alterados! Um bom exemplo a váriavel de ambiente $*. + Sem as aspas, ela cria uma string em uma única linha; Caso você use as aspas ela muda o seu retorno! @@ -140,14 +161,15 @@ ESTÁ EM DÚVIDA? USE ASPAS. COMENTÁRIOS SÃO IMPORTANTES! Ao contrário que muita gente fala, comentários são extremamentes importantes! - Não faça declarações de amor, ou falando mau do seu programa ou do mundo em geral! - Sim, eu sei que as vezes ficamos com ráiva por que um certo trecho de código não está - funcionando, faz parte e lide com isso. - Comentários são de extrema importância, pois assim estamos cooperando para outros programadores - mais leigos! - Eles conseguiram ler com mais facilidade um bloco de código, quando ele está comentado! - Faça sempre comentários nas linhas de códigos mais "complicadas" isto por exemplo não - é tão certo: + Não faça declarações de amor, ou falando mal do seu programa ou do mundo em geral! + Sim, eu sei que às vezes ficamos com raiva por que um certo trecho de código não está + funcionando, faz parte... lide com isso! + Comentários são de extrema importância, pois assim estamos cooperando com outros + programadores mais leigos! + Eles conseguirão ler com mais facilidade um bloco de código, quando ele estiver comentado! + Faça sempre comentários nas linhas de códigos mais "complicadas". + + Isto por exemplo não é tão certo: # Bloca que verifica se o usuário é root # se for root ele imprimi uma mensagem para @@ -158,9 +180,9 @@ COMENTÁRIOS SÃO IMPORTANTES! fi - Você não está falando para crianças do prezinho! você está falando com outros programadores. - Quem for ler o seu código, sabe o que quer! Mesmo que sejam programadores que estão récem aprendendo - Eles não são incopetentes a ponto de não saber o que um bloco simples deste faz! + Você não está falando para crianças do prezinho! Você está falando com outros programadores. + Quem for ler o seu código sabe o que quer! Mesmo que sejam programadores que estão iniciando + o aprendizado, eles não são incompetentes a ponto de não saber o que um faz um bloco simples como este! Caso prefira comentar, faça algo simples e direto: # É root? @@ -168,80 +190,86 @@ COMENTÁRIOS SÃO IMPORTANTES! printf "Rooot? não." fi - # Dialog está instalado? - if ! type -P dialog; then - printf %b "Parece que o dialog não está no seu sistema." - fi - - Percebeu que comentado fica mais fácil compreender? e eu precisei especificar o que todo o bloco faz? - Um simples comentário indo direto ao ponto já fica bem melhor a compreensão! - Por exemplo, muitas pessoas não sabem que com o comando type podemos verificar se o programa X está instalado - no sistema... - Ahh, já que entramos no assunto, o comando type é portavel para outros dialetos do Shell! - ao contrário do comando which. - - Caso você irá fazer uma maior explicação do que aquele bloco de código faz, use o bloco de comentários, - por exemplo: + # Dialog está instalado? + if ! type -P dialog; then + printf %b "Parece que o dialog não está no seu sistema." + fi - # BUG - # Nesta parte do código não estou conseguindo - # resolver a questão do status de sáida! - # Ele retorna status 0, quando era para estar - # retornando status 1. + Percebeu que comentado fica mais fácil compreender? E eu precisei especificar o que todo o bloco faz? Não. + Um simples comentário indo direto ao ponto já fica bem melhor a compreensão! + Por exemplo, muitas pessoas não sabem que com o comando type podemos verificar se o programa X está instalado + no sistema... + Ahh, já que entramos no assunto, o comando type é portavel para outros dialetos do Shell! + ao contrário do comando which. - Se for um pequeno comentário, prefira usar comentários de meia linha. + Caso você queira fazer uma maior explicação do que aquele bloco de código faz, use o bloco de comentários, + por exemplo: - > "arquivo.\$log" # Criando log temporário. - - Ou comentários do tipo cabeçalho. - - # Criando log temporário. - > "arquivo.\$log" + # BUG + # Nesta parte do código não estou conseguindo + # resolver a questão do status de sáida! + # Ele retorna status 0, quando era para estar + # retornando status 1. + + Se for um pequeno comentário, prefira usar comentários de meia linha. + + > "arquivo.\$log" # Criando log temporário. + + Ou comentários do tipo cabeçalho. + + # Criando log temporário. + > "arquivo.\$log" -&& || NÃO SUBSTITUI IF E ELSE - - Operadores lógicos AND e OR não são blocos condicionais if e else! - Tudo bem acontece que o && só executa o próximo comando se o primeiro comando retornar - status de sáida 0. - E o || é executado caso o primeiro comando retornar um status diferente de 0. - Utilize sempre operadores lógicos quando precisar verifcar um status por exemplo, que pode ser criado - em uma única linha, mas não abuse, prefira sempre blocos condicionais completos! - - Ok, seu código irá ficar mais grande, mas use a boa prática sempre! - Dê uma conferida em programas de programadores avançados em Shell... - Dificilmente você verá blocos de Operadores lógicos substituindo if/else. - - Condicional com and e not +'&&' E '||' NÃO SUBSTITUEM 'IF' E 'ELSE' + + Operadores lógicos 'AND' e 'OR' não são blocos condicionais 'if' e 'else'! + O && só executa o próximo comando se o primeiro comando retornar + status de sáida 0, + E o || é executado caso o primeiro comando retornar um status diferente de 0. + Utilize sempre operadores lógicos quando precisar verifcar um status por exemplo, que pode ser criado + em uma única linha, mas não abuse... prefira sempre blocos condicionais completos! + + Ok, seu código irá ficar com mais linhas, mas use a boa prática sempre! + Dê uma conferida em programas feitos por programadores avançados em Shell... + Dificilmente você verá blocos de Operadores lógicos substituindo if/else. + + + + + Condicional com 'and' e 'not' + + [[ "\$name" = "Slackjeff" ]] && shutdown -r now || printf "Usuário $name, não encontrado no sistema.\n." - [[ "\$name" = "Slackjeff" ]] && shutdown -r now || printf "Usuário $name, não encontrado no sistema.\n." - - ou + ou + + [[ "\$name" = "Slackjeff" ]] && \ \ + shutdown -r now + || \\ + printf "Usuário $name, não encontrado no sistema.\nVocê não tem permissão\n." - [[ "\$name" = "Slackjeff" ]] && \ \ + + + + Bloco condicional completo, if/else + + if [[ "\$name" = "Slackjeff" ]]; then shutdown -r now - || \\ - printf "Usuário $name, não encontrado no sistema.\nVocê não tem permissão\n." - - Bloco condicional completo, if/else - - if [[ "\$name" = "Slackjeff" ]]; then - shutdown -r now - else - printf "Usuário $name, não encontrado no sistema.\nVocê não tem permissão\n." - fi + else + printf "Usuário $name, não encontrado no sistema.\nVocê não tem permissão\n." + fi USE AWK COM MODERAÇÃO! - awk sem dúvidas é uma linguagem de manipulação de texto muito potente! - Integrada com sed, que é outra linguagem muito potente, você faz tudo, o que uma não faz - a outra com certeza irá fazer. - Mas use com cuidado a linguagem awk, ela é pesada e com certeza irá deixar seus programas mais - pesados. - Para substituir o awk você pode utilizar as ferramentas básicas que está presente em qualquer distribuição + 'awk' sem dúvidas é uma linguagem de manipulação de texto muito potente! + Integrada com 'sed', que é outra linguagem muito potente, você faz tudo! Q que uma não fizer, + a outra com certeza fará. + Mas use com cuidado a linguagem 'awk', pois ela é pesada e com certeza deixará seus programas mais pesados. + Para substituir o 'awk' você pode utilizar as ferramentas básicas que estão presente em qualquer distribuição GNU/Linux. + Exemplos: sed grep cut @@ -249,34 +277,36 @@ USE AWK COM MODERAÇÃO! OH MY READ - Programas com interação com o usuário é muito importante e legal! + Programas com interação com o usuário são muito importantes e legais! Para isto usamos o comando read, ele faz a leitura do stdin (teclado). - Mas a partir de agora você vai começar a reparar como os programadores o fazem! + Mas a partir de agora, você vai começar a reparar como os programadores o fazem! Vamos a alguns exemplos: - printf %s "Qual é o diretorio que você deseja salvar o arquivo?" - read dir_save + printf %s "Qual é o diretorio que você deseja salvar o arquivo?" + read dir_save O código acima pode simplesmente ser substituido assim, economizando uma linha e um printf: - read -p "Qual é o diretorio que você deseja salvar o arquivo?" dir_save + read -p "Qual é o diretorio que você deseja salvar o arquivo?" dir_save - Legal! mas eu quero colorir o o texto do read, como faço? simples utilize $'', basicamente você está + Legal! Mas eu quero colorir o o texto do read, como faço? simples utilize $'', basicamente você está protegendo sua string mas interpreta \n, \t, \a etc... diferente das aspas simples '' sozinha. - read -p $'\033[34;1mQual é o diretorio que você deseja salvar o arquivo?\033[m\n' dir_save + read -p $'\033[34;1mQual é o diretorio que você deseja salvar o arquivo?\033[m\n' dir_save - Um problema que vejo é ter 50 read fazendo um formulario, por exemplo supondo que eu quero fazer várias + + Um problema que vejo é ter 50 read fazendo um formulario, por exemplo: supondo que eu quero fazer várias perguntas para meu usuário, como eu faço? - read -p "Qual a sua idade?" idade - read -p "Cor favorita?" cor - read -p "Nome da sua mae" nome_mae - read -p "Escolaridadae?" escolaridade - read -p "Nome da namorada" nome_namorada + read -p "Qual a sua idade?" idade + read -p "Cor favorita?" cor + read -p "Nome da sua mae" nome_mae + read -p "Escolaridadae?" escolaridade + read -p "Nome da namorada" nome_namorada - Está correto usar vários read? sim! não está errado, e tem situações que você irá precisar usar o read neste - formato. + + Está correto usar vários read? Sim! Não está errado, e haverá situações em que você precisará usar o + read neste formato. Mas como é um simples formulário, podemos criar um loop for por exemplo, assim vamos economizar dedo. for form in "idade" "cor_favorita" "nome_mae" "escolaridade" "nome_namorada"; do @@ -286,30 +316,29 @@ OH MY READ STATUS DE SÁIDA! - Em muitos casos a váriavel de ambiente \$? salva nosso dia! principalmente quando precisamos verificar muitos - status de sáida, como é no caso da interface dialog. - Vamos ao exemplo, se o usuário apertar Yes o status retorna 0 se for No retorna 1. + Em muitos casos, a váriavel de ambiente \$? salva nosso dia! Principalmente quando precisamos verificar + muitos status de saída, como é o caso da interface dialog. + Vamos ao exemplo: Se o usuário apertar [yes], o status retorna 0; se apertar [no] retorna 1. - # Aperto no, o script sai. + # Aperto [no], o script sai. dialog --yesno "Você deseja continuar?" 0 0 if [[ "\$?" -ne "0" ]]; then exit 1 fi - Mas pode dar erro! se por acidente em uma madrugada eu acabo inserindo um echo - entre o dialog e a condicional if? - Não preciso dizer que o status irá mudar não é? será sempre 0, já que é quase impossivel do echo dar erro. - Você precisa entender que a váriavel de ambiente \$? é a maria vai com as outras, então tente evitar de usar ela. - Mas terá casos que você irá precisar usar. - Em seu lugar utilize bloco/blocos if! será melhor, e você evitá problemas futuros! + Mas pode dar erro! se por acidente em uma madrugada eu acabo inserindo um echo entre o dialog e a condicional if? + Não preciso dizer que o status vai mudar não é? Será sempre 0, já que é quase impossivel do echo dar erro. + Você precisa entender que a váriavel de ambiente \$? é a "Maria-vai-com-as-outras", então tente evitar de usar ela. + Mas haverá casos em que você precisará usar. + Em seu lugar, utilize bloco/blocos if! será melhor, e você evitá problemas futuros! Vamos ao mesmo exemplo acima com dialog... - # Aperto no, o script sai. + # Aperto [no], o script sai. if ! dialog --yesno "Você deseja continuar?" 0 0; then exit 1 fi - Mais um exemplo, vamos verificar se o grep achou o usuário root em /etc/passwd + Mais um exemplo. Vamos verificar se o grep achou o usuário root em /etc/passwd if grep -e "^[Rr]oot" /etc/passwd; then printf "Encontrei o usuário root no sistema!" @@ -318,10 +347,10 @@ STATUS DE SÁIDA! fi -TESTE COM CONSCIENCIA! +TESTE COM CONSCIÊNCIA! No interpretador bash não é correto fazer testes neste formato [ teste ], sim! se você não está usando - o bourne shell "sh" como interpretador prefira utilizar o padrão bash [[ teste ]]. + o bourne Shell "sh" como interpretador prefira utilizar o padrão bash [[ teste ]]. if [[ -z "\$HOME" ]]; then printf "Não está vazia." @@ -335,6 +364,7 @@ TESTE COM CONSCIENCIA! Texto criado por Jefferson Rocha +Texto revisado por Vovolinux EOF } @@ -348,7 +378,7 @@ OPÇÕES DISPONIVEIS: -c ou --criar Para criar um template utilize este parâmetro. - Você pode deixar todas informações nulas se caso você deseja. + Você pode deixar todas informações nulas se caso desejar. -a ou --ajuda Mostra esta opção de ajuda. @@ -363,10 +393,7 @@ EOF base(){ # A base de todo o programa se encontra aqui - # Caso queira modificar, não esqueça de adicionar - # tambem no vetor. - - + # Verifica se a extensão foi informada, para incluir no nome do arquivo criado. if [[ "${extensao}" != "" ]]; then template="${template}.${extensao}" @@ -379,11 +406,11 @@ cat << EOF > "${template}" #-----------HEADER-------------------------------------------------------------| # AUTOR : $autor <$e_mail> # HOMEPAGE : $homepage -# DATA-DE-CRIAÇÃO : $data +# DATA DE CRIAÇÃO : $data # PROGRAMA : $nome_do_programa # VERSÃO : $versao # LICENÇA : $licenca -# PEQUENA-DESCRIÇÃO : $pequena_descricao +# PEQUENA DESCRIÇÃO : $pequena_descricao # # CHANGELOG : # @@ -438,17 +465,16 @@ permissao() criar() { - data=$(date "+%d/%m/%Y às %H:%M") - # Vetor contendo o questionario que será passado para o usuario. - informacoes=("autor" "e_mail" "homepage" "nome_do_programa" "extensao" "interpretador" "versao" "licenca" "pequena_descricao") local texto="${vermelho}Preencha todos os dados corretamente! Assim você não perde seu tempo depois. -O arquivo gerado terá o nome ${branco}template.EXTENSAO${fecha} ${vermelho}no diretório atual.\n\n${fecha}" +O arquivo gerado terá o nome ${branco}nome_do_programa.extensao${fecha}.\n\n${fecha}" printf %b "$texto" + i=0 for info in "${informacoes[@]}"; do - read -ep "${info[@]}: " ${info[@]} + read -ep "${questionario[$i]}: " ${info[@]} + let i++ done [[ "${nome_do_programa}" = '' ]] || template="${nome_do_programa}" From 9d6ca5e0ef9e840c3ac0ba4cdccaec62debb684d Mon Sep 17 00:00:00 2001 From: Viniciusalopes Date: Sat, 25 Apr 2020 15:21:07 -0300 Subject: [PATCH 05/14] =?UTF-8?q?Frase=20de=20cria=C3=A7=C3=A3o=20do=20arq?= =?UTF-8?q?uivo=20com=20o=20template?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shell-Base | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Shell-Base b/Shell-Base index 412ab30..8e37661 100755 --- a/Shell-Base +++ b/Shell-Base @@ -468,7 +468,8 @@ criar() local texto="${vermelho}Preencha todos os dados corretamente! Assim você não perde seu tempo depois. -O arquivo gerado terá o nome ${branco}nome_do_programa.extensao${fecha}.\n\n${fecha}" +O arquivo terá o nome ${branco}nome_do_programa.extensao${fecha} +e será gerado na pasta atual ou no caminho informado no nome do programa.\n\n${fecha}" printf %b "$texto" i=0 From d707505b55ea4ca4df89ea1adadfbf6139a7034b Mon Sep 17 00:00:00 2001 From: Viniciusalopes Date: Tue, 28 Apr 2020 17:43:08 -0300 Subject: [PATCH 06/14] v1.0.2 --- Shell-Base | 81 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 21 deletions(-) diff --git a/Shell-Base b/Shell-Base index 8e37661..e10e22c 100755 --- a/Shell-Base +++ b/Shell-Base @@ -12,11 +12,14 @@ # como deve ser! # Seus programas serão mais profissionais com o Shell-Base. # CHANGELOG : -# 2020-04-25 - Vovolinux +# 2020-04-26 - Vovolinux # - Criado o vetor contendo o questionário que será exibido para o usuário. # - Alterada a função criar() para exibir o questionário. # - Vetor 'informacoes' movido para a sessão --- VARIÁVEIS --- do script. # - Revisão de ortografia e gramática. +# - Criada a função 'set_dir_template' para corrigir path do template. +# - Incluida a variável 'dir_template' para o diretório de criação do template. +# - Incluída a anoteção de copyright 'licenca - © yyyy - autor' # # 2019-12-13 - Vovolinux # - Incluída a verificação de r00t como default para os templates criados. @@ -28,6 +31,9 @@ #--------------------------------- VARIÁVEIS ----------------------------------> +# Diretório para criação do template +dir_template="$PWD" + # Nome do template que será criado (Ex.: nome_do_programa.extensao) template="template" @@ -36,11 +42,11 @@ data=$(date "+%d/%m/%Y às %H:%M") # Vetor contendo o questionário que será passado para o usuário. # Caso queira modificar, não esqueça de adicionar tambem no vetor 'questionario'. -informacoes=("autor" "e_mail" "homepage" "nome_do_programa" "extensao" "interpretador" "versao" "licenca" "pequena_descricao") +informacoes=("autor" "e_mail" "homepage" "dir_template" "nome_do_programa" "extensao" "interpretador" "versao" "licenca" "pequena_descricao") # Vetor contendo o questionário que será exibido para o usuário. # Caso queira modificar, não esqueça de adicionar tambem no vetor 'informacoes'. -questionario=("Autor" "E-mail" "Homepage" "Nome do programa" "Extensao" "Interpretador" "Versão" "Licença" "Pequena descrição") +questionario=("Autor" "E-mail" "Homepage" "Diretório do template" "Nome do programa" "Extensao" "Interpretador" "Versão" "Licença" "Pequena descrição") # Colorindo a sua vida. fecha="\033[m" @@ -368,8 +374,6 @@ Texto revisado por Vovolinux EOF } - - ajuda() { clear @@ -390,16 +394,35 @@ EOF } +# Corrige o path do template +set_dir_template() +{ + # Se não informar o diretório + [[ "${dir_template}" = "" ]] && dir_template="$PWD" + + # Substitui o ~ (til) pelo endereço absoluto da home do usuário + [[ "${dir_template:0:2}" = "~/" ]] && dir_template="${HOME}${dir_template: 1}" + + # Retira a barra do final + [[ "${dir_template: -1}" = "/" ]] && dir_template="${dir_template::-1}" + + # Cria o dir_template informado caso não exista + if ! [[ -d "${dir_template}" ]]; then + printf %b "\n" + mkdir -v "${dir_template}" + fi + + # Verifica se a extensão foi informada, para incluir no nome do arquivo criado. + if [[ "${extensao}" != "" ]]; then + template="${template}.${extensao}" + fi +} +# A base de todo o programa se encontra aqui base(){ - # A base de todo o programa se encontra aqui + set_dir_template -# Verifica se a extensão foi informada, para incluir no nome do arquivo criado. -if [[ "${extensao}" != "" ]]; then - template="${template}.${extensao}" -fi - -cat << EOF > "${template}" +cat << EOF > "${dir_template}/${template}" #!/usr/bin/env $interpretador # Template orgulhosamente criado por (Shell-Base) @@ -409,7 +432,7 @@ cat << EOF > "${template}" # DATA DE CRIAÇÃO : $data # PROGRAMA : $nome_do_programa # VERSÃO : $versao -# LICENÇA : $licenca +# LICENÇA : $licenca - © $(date "+%Y") - $autor # PEQUENA DESCRIÇÃO : $pequena_descricao # # CHANGELOG : @@ -419,7 +442,24 @@ cat << EOF > "${template}" #--------------------------------- VARIÁVEIS ----------------------------------> # # Aqui vão todas as váriaveis do programa. -# + +### VARIÁVEIS DO SCRIPT ### + +# Autor +autor='$autor' + +# Programa +programa='$nome_do_programa' + +# Versão +versao='$versao' + +# Ano atual +ano=$(date "+%Y") + +# Informação de Copyryght +copyright="© ${ano} - ${autor}" + #------------------------------- FIM-VARIÁVEIS --------------------------------< @@ -459,7 +499,8 @@ EOF permissao() { printf %b "\n" - chmod 755 "${template}" -v + printf %b "Diretorio: ${dir_template}\nArquivo: ${template}\n\n" + chmod 755 "${dir_template}/${template}" -v printf %b "\n" } @@ -468,7 +509,7 @@ criar() local texto="${vermelho}Preencha todos os dados corretamente! Assim você não perde seu tempo depois. -O arquivo terá o nome ${branco}nome_do_programa.extensao${fecha} +O arquivo terá o nome ${branco}nome_do_programa.extensao${fecha}${vermelho} e será gerado na pasta atual ou no caminho informado no nome do programa.\n\n${fecha}" printf %b "$texto" @@ -480,11 +521,10 @@ e será gerado na pasta atual ou no caminho informado no nome do programa.\n\n${ [[ "${nome_do_programa}" = '' ]] || template="${nome_do_programa}" - # Chamando e testando a função para criar template de acordo - # com os dados passados. + # Chamando e testando a função para criar template de acordo com os dados passados. if base; then permissao - printf %b "${verde}Concluído com sucesso.\nArquivo gerado: ${template}${fecha}\n" + printf %b "${verde}Concluído com sucesso.\nArquivo gerado: ${dir_template}/${template}${fecha}\n" exit 0 else printf %b "${vermelho}Não consegui criar o arquivo, tente novamente...\n${fecha}" @@ -503,5 +543,4 @@ case $1 in -a|--ajuda) ajuda ;; # Chamada Função. -d|--dicas) dicas ;; # Chamada Função. *) printf %b "Você pode conferir toda ajuda utilizando o parâmetro ${vermelho}-a${fecha} ou ${vermelho}--ajuda${fecha}\n" -esac - +esac From 9fe7ccfee96be29c12ac7aae08de6d83ff6adc53 Mon Sep 17 00:00:00 2001 From: Viniciusalopes Tecnologia <33704906+Viniciusalopes@users.noreply.github.com> Date: Tue, 28 Apr 2020 20:49:12 -0300 Subject: [PATCH 07/14] Update README.md --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 3957b8a..9a5ddce 100755 --- a/README.md +++ b/README.md @@ -1,2 +1,17 @@ # shell-base + Programa para criação de template de Shell Script, deixe tudo organizado como deve ser! Seus programas serão mais profissionais com o Shell-Base. + +## Download +Para fazer o download do programa, digite no terminal: + +```wget https://raw.githubusercontent.com/Viniciusalopes/shell-base/master/Shell-Base``` + +## Uso +Para utilizar o programa, digite: + +```bash Shell-base``` + + +--- +Vovolinux - Sem trauma e sem teoria! From 799c25d15213960d6a9196f6c082a29fc18033cb Mon Sep 17 00:00:00 2001 From: Viniciusalopes Tecnologia <33704906+Viniciusalopes@users.noreply.github.com> Date: Tue, 28 Apr 2020 21:05:37 -0300 Subject: [PATCH 08/14] Update README.md --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9a5ddce..f5e80fc 100755 --- a/README.md +++ b/README.md @@ -3,14 +3,20 @@ Programa para criação de template de Shell Script, deixe tudo organizado como deve ser! Seus programas serão mais profissionais com o Shell-Base. ## Download + Para fazer o download do programa, digite no terminal: ```wget https://raw.githubusercontent.com/Viniciusalopes/shell-base/master/Shell-Base``` ## Uso -Para utilizar o programa, digite: -```bash Shell-base``` +Para conceder permissão de execução para utilizar o programa, conceda permissão de execução com o comando: + +```chmod +x Shell-base``` + +Para utilizar o programa, conceda permissão de execução com o comando: + +```./Shell-base``` --- From 2f4be9de10faf7eb2ed7aa096d4a75a4b6a801a9 Mon Sep 17 00:00:00 2001 From: Viniciusalopes Tecnologia <33704906+Viniciusalopes@users.noreply.github.com> Date: Tue, 28 Apr 2020 21:06:22 -0300 Subject: [PATCH 09/14] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f5e80fc..d9ff1a5 100755 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Para conceder permissão de execução para utilizar o programa, conceda permiss ```chmod +x Shell-base``` + Para utilizar o programa, conceda permissão de execução com o comando: ```./Shell-base``` From 9fce8e585763681ce525baef0aaa4c180e9a0322 Mon Sep 17 00:00:00 2001 From: Viniciusalopes Tecnologia <33704906+Viniciusalopes@users.noreply.github.com> Date: Tue, 28 Apr 2020 21:06:33 -0300 Subject: [PATCH 10/14] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d9ff1a5..faae751 100755 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ Para conceder permissão de execução para utilizar o programa, conceda permiss ```chmod +x Shell-base``` + Para utilizar o programa, conceda permissão de execução com o comando: ```./Shell-base``` From 13944372f634213b7b3b661d4ab702831ec5a91b Mon Sep 17 00:00:00 2001 From: Viniciusalopes Date: Tue, 28 Apr 2020 21:11:26 -0300 Subject: [PATCH 11/14] =?UTF-8?q?Fix:=20Gera=C3=A7ao=20de=20script=20com?= =?UTF-8?q?=20campos=20vazios=20passou=20a=20assumir=20o=20bash=20como=20i?= =?UTF-8?q?nterpretador.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shell-Base | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Shell-Base b/Shell-Base index e10e22c..0d10cf0 100755 --- a/Shell-Base +++ b/Shell-Base @@ -422,6 +422,10 @@ set_dir_template() base(){ set_dir_template + if [[ "${interpretador}" -eq "" ]]; then + interpretador='bash' + fi + cat << EOF > "${dir_template}/${template}" #!/usr/bin/env $interpretador # Template orgulhosamente criado por (Shell-Base) @@ -455,7 +459,7 @@ programa='$nome_do_programa' versao='$versao' # Ano atual -ano=$(date "+%Y") +ano='$(date "+%Y")' # Informação de Copyryght copyright="© ${ano} - ${autor}" From 4a444d0f5d82de935da78a14d4e49dfcd227bccf Mon Sep 17 00:00:00 2001 From: Viniciusalopes Date: Sat, 23 Jan 2021 18:20:01 -0300 Subject: [PATCH 12/14] =?UTF-8?q?Fix:=20ano=20atual=20e=20informa=C3=A7ao?= =?UTF-8?q?=20de=20Copyright?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shell-Base | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Shell-Base b/Shell-Base index 0d10cf0..37e54d3 100755 --- a/Shell-Base +++ b/Shell-Base @@ -426,6 +426,8 @@ base(){ interpretador='bash' fi + ano=$(date "+%Y") + cat << EOF > "${dir_template}/${template}" #!/usr/bin/env $interpretador # Template orgulhosamente criado por (Shell-Base) @@ -459,9 +461,9 @@ programa='$nome_do_programa' versao='$versao' # Ano atual -ano='$(date "+%Y")' +ano='${ano}' -# Informação de Copyryght +# Informação de Copyright copyright="© ${ano} - ${autor}" #------------------------------- FIM-VARIÁVEIS --------------------------------< From b4c500cfb4eab97f19a36156f762a73d2e3950b7 Mon Sep 17 00:00:00 2001 From: Viniciusalopes Date: Tue, 2 Nov 2021 00:50:09 -0300 Subject: [PATCH 13/14] =?UTF-8?q?Vari=C3=A1vel=20para=20vers=C3=A3o;=20=20?= =?UTF-8?q?Exibe=20ajuda=20ao=20chamar=20sem=20argumentos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shell-Base | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Shell-Base b/Shell-Base index 37e54d3..e13e001 100755 --- a/Shell-Base +++ b/Shell-Base @@ -7,11 +7,16 @@ # DATA DE CRIAÇÃO : 2018-03-26 # PROGRAMA : Shell-Base # VERSÃO : 1.0.2 +SHELL_BASE_VERSION='1.0.2' # LICENÇA : GPL3 # PEQUENA DESCRIÇÃO : Programa para criação de template, deixe tudo organizado # como deve ser! # Seus programas serão mais profissionais com o Shell-Base. # CHANGELOG : +# 2021-11-02 - Vovolinux +# - Criada variável SHELL_BASE_VERSION para exibir a versão na ajuda; +# - Exibindo ajuda ao chamar o Shell-Base sem argumentos. +# # 2020-04-26 - Vovolinux # - Criado o vetor contendo o questionário que será exibido para o usuário. # - Alterada a função criar() para exibir o questionário. @@ -378,6 +383,9 @@ ajuda() { clear cat << EOF +--------------------- + Shell-Base - v$SHELL_BASE_VERSION +--------------------- OPÇÕES DISPONIVEIS: -c ou --criar @@ -548,5 +556,5 @@ case $1 in -c|--criar) criar ;; # Chamada Função. -a|--ajuda) ajuda ;; # Chamada Função. -d|--dicas) dicas ;; # Chamada Função. - *) printf %b "Você pode conferir toda ajuda utilizando o parâmetro ${vermelho}-a${fecha} ou ${vermelho}--ajuda${fecha}\n" + *) ajuda esac From 771b0152d4192b65bab9403e1a62253fe62a9e3b Mon Sep 17 00:00:00 2001 From: viniciusalopes Date: Fri, 7 Jan 2022 06:42:49 -0300 Subject: [PATCH 14/14] Decorations TTY --- Shell-Base | 62 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 11 deletions(-) diff --git a/Shell-Base b/Shell-Base index e13e001..4983cad 100755 --- a/Shell-Base +++ b/Shell-Base @@ -13,6 +13,10 @@ SHELL_BASE_VERSION='1.0.2' # como deve ser! # Seus programas serão mais profissionais com o Shell-Base. # CHANGELOG : +# 2022-01-07 - Vovolinux +# - Criada a sessão DECORATIONS TTY dentro de variáveis, com mais cores de +# fonte e outras decorações para o emulador de terminal. +# # 2021-11-02 - Vovolinux # - Criada variável SHELL_BASE_VERSION para exibir a versão na ajuda; # - Exibindo ajuda ao chamar o Shell-Base sem argumentos. @@ -53,11 +57,47 @@ informacoes=("autor" "e_mail" "homepage" "dir_template" "nome_do_programa" "exte # Caso queira modificar, não esqueça de adicionar tambem no vetor 'informacoes'. questionario=("Autor" "E-mail" "Homepage" "Diretório do template" "Nome do programa" "Extensao" "Interpretador" "Versão" "Licença" "Pequena descrição") -# Colorindo a sua vida. -fecha="\033[m" -verde="\033[32;1m" -vermelho="\033[31;1m" -branco="\033[37;1m" +#------------------------------ DECORATIONS TTY -------------------------------> +# SOURCES: +# https://www.vivaolinux.com.br/artigo/Formatando-o-bash-com-cores-e-efeitos +# https://github.com/Viniciusalopes/shell-base + + +# Decorating your life. +CLOSE="\033[m" +BOLD="\033[;1m" +ITALIC="\033[;3m" +UNDERLINE="\033[;4m" +BLINKING="\033[;5m" +REVERSE="\033[;7m" +HIDDEN="\033[;8m" +STRIKETHROUG="\033[9m" + +# Coloring your life. + +# Foreground colors +GRAY="\033[;2m" +BLACK="\033[;30m" +RED="\033[;31m" +GREEN="\033[;32m" +YELLOW="\033[;33m" +BLUE="\033[;34m" +MAGENTA="\033[;35m" +CYAN="\033[;36m" +WHITE="\033[;37m" + +# Background colors +BGBLACK="\033[;40m" +BGRED="\033[;41m" +BGGREEN="\033[;42m" +BGYELLOW="\033[;43m" +BGBLUE="\033[;44m" +BGMAGENTA="\033[;45m" +BGCYAN="\033[;46m" +BGWHITE="\033[;47m" + +#---------------------------- END DECORATIONS TTY -----------------------------< + #------------------------------- FIM-VARIÁVEIS --------------------------------< @@ -183,7 +223,7 @@ COMENTÁRIOS SÃO IMPORTANTES! Isto por exemplo não é tão certo: # Bloca que verifica se o usuário é root - # se for root ele imprimi uma mensagem para + # se for root ele imprime uma mensagem para # o usuário. # Se não for root o programa continua! if test "\$UID" -eq "0"; then @@ -521,10 +561,10 @@ permissao() criar() { - local texto="${vermelho}Preencha todos os dados corretamente! + local texto="${RED}Preencha todos os dados corretamente! Assim você não perde seu tempo depois. -O arquivo terá o nome ${branco}nome_do_programa.extensao${fecha}${vermelho} -e será gerado na pasta atual ou no caminho informado no nome do programa.\n\n${fecha}" +O arquivo terá o nome ${WHITE}nome_do_programa.extensao${CLOSE}${RED} +e será gerado na pasta atual ou no caminho informado no nome do programa.\n\n${CLOSE}" printf %b "$texto" i=0 @@ -538,10 +578,10 @@ e será gerado na pasta atual ou no caminho informado no nome do programa.\n\n${ # Chamando e testando a função para criar template de acordo com os dados passados. if base; then permissao - printf %b "${verde}Concluído com sucesso.\nArquivo gerado: ${dir_template}/${template}${fecha}\n" + printf %b "${GREEN}Concluído com sucesso.\nArquivo gerado: ${dir_template}/${template}${CLOSE}\n" exit 0 else - printf %b "${vermelho}Não consegui criar o arquivo, tente novamente...\n${fecha}" + printf %b "${RED}Não consegui criar o arquivo, tente novamente...\n${CLOSE}" exit 1 fi }