-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcabecalho
More file actions
executable file
·304 lines (252 loc) · 9.12 KB
/
cabecalho
File metadata and controls
executable file
·304 lines (252 loc) · 9.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
#!/bin/bash
#
# cabecalho
#
# Objetivo: Gerar o cabeçalho para um arquivo de programa de uma
# determinada linguagem de programação com objetivo, nome do programa,
# programador e etc.
#
# Site: https://www.geofisicando.com
#
# Versão 1.0
#
# Programador: Rodolfo A. C. Neves 27/12/2018
#
# email: rodolfo_profissional@hotmail.com
#
# Funcionamento: cabecalho -op NomeDoArquivo.sh (cria o arquivo já com um cabeçalho padronizado)
# ** -Op pode assumir os seguintes valores
# -sh (shell script)
# -sci (scilab)
# -c (linguagem C)
# -c++ (linguagem C++)
# -php (Script PHP)
# -html-php (Página HTML com php)
# -f90 (Fortran 90)
# -mf90 (Módulo Fortran 90)
# -tex (Arquivo LaTeX)
# -py (Python)
# -html (Página HTML)
# -js (JavaScript)
# -css (Folha de estilo CSS)
# -java (Classe Java)
#
# Exemplo de uso: cabecalho -sh arquivo.sh (Gera o arquivo.sh com o cabeçalho padronizado)
#
# Licença: software de uso livre e código aberto.
# Biblioteca de funções para formatar a mensagem de ajuda
source mensagemAjuda
# Biblioteca de funções para formatar a mensagem de erro
source mensagemErro
## Verificar se o usuário forneceu $1 e $2
if [ -z "$1" ]
then
MENSAGEMERRO="Usuário não ofereceu parâmetros ao programa!\nDigite $(basename $0) -h para obter ajuda!"
exibirMensagemErroProgramaFormatada "$(basename $0)" "1" "$MENSAGEMERRO"
fi
# Versão deste programa
VERSAO="Versão 1.0"
verificarSeArquivoExiste(){
ARQUIVO="$1"
[ -f "$ARQUIVO" ] && {
return 1
}
return 0
}
# Armazena variáveis template para exibir no cabeçalho
CONFIG="$HOME/.bash_aliases"
## Variáveis que armazenam mensagem de ajuda do programa
NOME_PROGRAMA="$(basename $0)"
DESCRICAO="Gerar o cabeçalho para um arquivo de programa de uma determinada linguagem de programação com objetivo, nome do programa, programador e etc."
PARAMETROS="-h --help::Exibe essa tela de ajuda e sai
-v --version::Exibe a versão do programa e sai
-conf --config :: Configurar variáveis template para o cabeçalho
-l --list :: Lista todas as variáveis configuradas
-en --english:: Cabeçalho em inglês
-sh ::Cabeçalho para um programa em shell script
-sci ::Cabeçalho para um programa do scilab
-c ::Cabeçalho para um programa em C
-c++ ::Cabeçalho para um programa em C++
-tex ::Cabeçalho LaTeX
-py :: Cabeçalho Python
-f90 :: Cabeçalho Fortran 90
-mf90 :: Cabeçalho Módulo Fortran 90
-html :: Página HTML
-js :: JavaScript
-css :: Folha de estilo CSS
-java :: Classe Java
-php :: Script PHP
-html-php :: Página HTML com PHP
-m <objetivo>::Fornecer o Objetivo ao cabeçalho do arquivo"
EXEMPLO_DE_USO="~$ $(basename $0) -sh Arquivo.sh # Cabeçalho para Arquivo.sh
\t~$ $(basename $0) -en -sh Arquivo.sh # Cabeçalho em INGLÊS para Arquivo.sh
\t~$ $(basename $0) -sh Arquivo.sh -m <objetivo> # Adiciona o <objetivo> ao cabeçalho do arquivo
\t~$ $(basename $0) --config user.programador=<nome> # Configurar o nome do programador
\t~$ $(basename $0) --config user.site=<url> # Configurar o site do programador
\t~$ $(basename $0) --config user.email=<email> # Configurar o email do programador
\t~$ $(basename $0) --config user.licenca=<licenca> # Configurar a licença de uso
"
case "$1" in
-h | --help) ## Exibe a ajuda
exibirMensagemAjudaProgramaFormatada "$NOME_PROGRAMA" "$DESCRICAO" "$PARAMETROS" "$EXEMPLO_DE_USO"
exit 0
;;
-v | --version) ## Exibe a versão do programa
echo $VERSAO
exit 0
;;
-l | --list) ## Listar variáveis em $HOME/.bash_aliases
sed -n '/^#/!p' "$CONFIG" | tr '§' '/' | grep -v "^alias" | grep "^CABECALHO__USER__"
exit 0
;;
-conf | --config) ## Configurar variáveis de template do cabeçalho
## Usuário passou parâmetro para --config?
[ -z "$2" ] && {
MENSAGEMERRO="--config precisa de mais parâmetros!\nDigite $(basename $0) -h para obter ajuda!"
exibirMensagemErroProgramaFormatada "$(basename $0)" "2" "$MENSAGEMERRO"
}
VARIAVEL_FORNECIDA=$(echo "$2" | cut -d"=" -f1)
case "$VARIAVEL_FORNECIDA" in
user.programador) VARIAVEL_FORNECIDA="CABECALHO__USER__PROGRAMADOR";;
user.site) VARIAVEL_FORNECIDA="CABECALHO__USER__SITE";;
user.email) VARIAVEL_FORNECIDA="CABECALHO__USER__EMAIL";;
user.licenca) VARIAVEL_FORNECIDA="CABECALHO__USER__LICENCA";;
esac
VALOR_FORNECIDO=$(echo "$2" | cut -d"=" -f2 | tr "/" '§')
[ -f "$CONFIG" ] || {
touch "$CONFIG"
}
# Verificar se já há um valor para a variável fornecida
# pelo usuário armazenado no arquivo
VARIAVEL_EXISTENTE=$(grep "$VARIAVEL_FORNECIDA" "$CONFIG")
if [ -z "$VARIAVEL_EXISTENTE" ]
then
echo "$VARIAVEL_FORNECIDA=\"$VALOR_FORNECIDO\"" >> "$CONFIG"
else
sed -i "/^#/!s/$VARIAVEL_FORNECIDA=.*/$VARIAVEL_FORNECIDA=\"$VALOR_FORNECIDO\"/" "$CONFIG"
fi
exit 0
;;
esac
# Verificar se há um template de cabeçalho
# definido em .config/cabecalho.config.txt
[ -f "$CONFIG" ] && {
TMP=$(sed -n '/^#/!p' "$CONFIG" | tr '§' '/')
PROGRAMADOR=$(echo "$TMP" | grep "CABECALHO__USER__PROGRAMADOR" | cut -d"=" -f2)
SITE=$(echo "$TMP" | grep "CABECALHO__USER__SITE" | cut -d"=" -f2)
EMAIL=$(echo "$TMP" | grep "CABECALHO__USER__EMAIL" | cut -d"=" -f2)
LICENCA=$(echo "$TMP" | grep "CABECALHO__USER__LICENCA" | cut -d"=" -f2)
}
## variável que armazena o cabeçalho padronizado
DATA=$(date +%d/%m/%Y)
if [ "-en" == "$1" -o "--english" == "$1" ]
then
HEAD="$ARQUIVO_CRIADO (§)\n\nPurpose:\n\nSite: $SITE\n\nVersion 1.0\n\nProgrammer: $PROGRAMADOR $DATA\n\nEmail: $EMAIL\n\nLicense: $LICENCA."
shift
else
HEAD="$ARQUIVO_CRIADO (§)\n\nObjetivo:\n\nSite: $SITE\n\nVersão 1.0\n\nProgramador: $PROGRAMADOR $DATA\n\nEmail: $EMAIL\n\nLicença: $LICENCA."
fi
# Usuário forneceu um nome para o arquivo a ser criado?
[ -z "$2" ] && {
MENSAGEMERRO="Usuário não ofereceu o nome do arquivo!\nDigite $(basename $0) -h para obter ajuda"
exibirMensagemErroProgramaFormatada "$(basename $0)" "3" "$MENSAGEMERRO"
}
# Arquivo que será criado
file="$2"
ARQUIVO_CRIADO="$2"
# Verificar se o usuário forneceu o nome
# de um arquivo que já existe.
# Se sim, faça uma cópia.
verificarSeArquivoExiste "$file"
if [ "$?" -ne "0" ]
then
mv "$2" "$2.bak" #cópia .bak
EXISTE="1"
fi
[ "$3" == "-m" -a -n "$4" ] && {
HEAD=$(echo "$HEAD" | sed "s/Objetivo:/Objetivo: $4/")
}
case "$1" in
-sh) ## cabeçalho para shell script
echo -e '#!/bin/bash\n#' >> "$file"
echo -e "$HEAD" | sed '/bin/!s/^/# /g;s/§/Shell Script/' >> "$file"
;;
-sci) ## cabeçalho para script do scilab
echo -e "$HEAD" | sed 's/^/\/\/ /g;s/§/Scilab/' >> "$file"
echo -e "clc\nclear\nclose" >> "$file"
;;
-c) ## cabeçalho para C
echo -e "/*" >> "$file"
echo -e "$HEAD" | sed 's/^/* /g;s/§/C/' >> "$file"
echo -e "*/" >> "$file"
;;
-c++) ## cabeçalho para C++
echo -e "/*" >> "$file"
echo -e "$HEAD" | sed 's/^/* /g;s/§/C++/' >> "$file"
echo -e "*/" >> "$file"
;;
-tex) ## cabeçalho para LateX
echo "%" >> "$file"
echo -e "$HEAD" | sed 's/^/% /' | sed 's/§/LaTeX/' >> "$file"
;;
-py) ## cabeçalho para python
echo "# coding: utf-8" >> "$file"
echo "#" >> "$file"
echo -e "$HEAD" | sed 's/^/# /' | sed 's/§/Python/' >> "$file"
;;
-f90) ## cabeçalho arquivo Fortran 90
echo -e "PROGRAM $(basename $2 .f90)\n!" >> "$file"
echo -e "$HEAD" | sed 's/^/! /' | sed 's/§/Fortran 90/' >> "$file"
;;
-mf90) ## cabeçalho módulo Fortran 90
echo -e "MODULE $(basename $2 .f90)\n!" >> "$file"
echo -e "$HEAD" | sed 's/^/! /' | sed 's/§/Fortran 90/' >> "$file"
;;
-html) ## cabeçalho HTML
HEAD=$(echo -e "$HEAD" | sed 's/^/\t/;s/§/HTML/')
CABECALHO_HTML="<!doctype html>\n<!--\n$HEAD\n-->\n<head>"
echo -e "$CABECALHO_HTML" >> "$file"
echo -e "\t<meta charset=\"utf-8\">" >> "$file"
echo -e "\t<title></title>" >> "$file"
echo -e "\t<link type=\"text/css\" rel=\"stylesheet\" href=\" \">" >> "$file"
echo -e "\t<script type=\"text/javascript\" src=\" \"></script>" >> "$file"
echo -e "</head>\n<body>\n\n</body>\n</html>" >> "$file"
;;
-js) ## Cabeçalho JavaScript
echo -e "/*\n$HEAD\n*/" | sed '/*/!s/^/\t /;s/§/JavaScript/' >> "$file"
;;
-css) ## Cabeçalho CSS
echo -e "/*\n$HEAD\n*/" | sed '/*/!s/^/\t /;s/§/CSS/' >> "$file"
;;
-java) ## Cabeçalho Java
echo -e "/*\n$HEAD\n*/" | sed '/*/!s/^/\t /;s/§/Java/' >> "$file"
;;
-php) ## Cabeçalho Script PHP
echo '<?php' >> "$file"
echo -e "/*\n$HEAD\n*/\n\n" | sed '/*/!s/^/\t /;s/§/PHP/' >> "$file"
echo '?>' >> "$file"
;;
-html-php) ## Cabeçalho Página HTML com PHP
HEAD=$(echo -e "$HEAD" | sed 's/^/\t/;s/§/PHP/')
CABECALHO_HTML="<!doctype html>\n<!--\n$HEAD\n-->\n<head>"
echo -e "$CABECALHO_HTML" >> "$file"
echo -e "\t<meta charset=\"utf-8\">" >> "$file"
echo -e "\t<title></title>" >> "$file"
echo -e "\t<link type=\"text/css\" rel=\"stylesheet\" href=\" \">" >> "$file"
echo -e "\t<script type=\"text/javascript\" src=\" \"></script>" >> "$file"
echo -e "</head>\n<body>\n<?php\n\n?>\n</body>\n</html>" >> "$file"
;;
*)
MENSAGEMERRO="Opção $1 Desconhecida!\nDigite $(basename $0) -h para obter ajuda"
exibirMensagemErroProgramaFormatada "$(basename $0)" "4" "$MENSAGEMERRO"
esac
# Se o arquivo existe
# Copie o resto do arquivo
# para o cabeçalho
if [ "$EXISTE" = "1" ]
then
echo -e "\n" >> "$file"
cat "$file.bak" >> "$file"
rm $file.bak
fi
exit 0