Bang.sh - Framework para Shell Script

Iniciar uma aplicações em bash script geralmente é uma tarefa trabalhosa, mas o Bang.sh pode lhe ajudar. O framework , tentar trazer uma forma mais organizada de se programar em Shell Script . Muitos dos scripts que são vistos por aí, acabam sendo códigos mal identados e confusos.

O framework está disponível num repositório no GitHub. Se você se sentir a vontade, pode contribuir ! Todas contribuições são bem vindas. Se algum bug for encontrado, reporte! Assim poderemos tornar o framework mais estável e útil.

O uso dele é bem simples. Por hora, ainda não faz muitas coisas, mas já quebra o galho ! A funcionalidade mais importante dele agora é o parseador de parâmetros.

Vamos fazer um exemplo

#!/bin/sh
# app.sh
source ./bang.sh
# Help flag
bang_addflag --help "Show this help"
bang_addalias --help -h
# Message
bang_addopt --msg "Message to be printed!"
bang_addalias --msg -m
# Output
bang_addflag --stderr "Redirects the message to stderr"
bang_required_args "--msg"
bang_init "$@"
if bang_hasflag --help; then
 bang_show_usage
else
 bang_check_required_args
 msg="Your message is: $(bang_getopt --msg)"
 cmd="echo"
 bang_hasflag --stderr && cmd="print_e"
 $cmd "$msg"
fi

No script acima são adicionadas 3 argumentos ao arquivo:

Veja agora o output segundo a combinação de alguns parâmetros

Sem argumentos, o programa deve verificar pelos argumentos requeridos

./app.sh
The program was aborted due an error:
Option '--msg' is required and was not specified

Mostrando o texto de ajuda automaticamente montado

./app.sh -h

Ou

./app.sh --help
Showing script usage:
Options:
--msg|-m  (Required) Message to be printed!
Flags:
--help|-h Show this help
--stderr Redirects the message to stderr

Imprime a mensagem no STDOUT

./app.sh --msg "Hello World"
Your message is: Hello World

Imprime a mensagem no STDERR

./app.sh --msg "Hello World" --stderr 1>/dev/null
Your message is: Hello World

Além destas, há outras funções úteis, como o bang_raise_error que dispara um erro (e mostra no STDERR) formatado com um padrão e dá exit 2.

bang_raise_error “Mensagem de erro”

Há também a função para imprimir no STDERR.

print_e “Mensagem que irá para para o STDERR”

Funções úteis como o in_array e key_exists para se trabalhar com arrays.

A=(A B C)
in_array "B" "A" && echo "B está em \$A"
declare -A A=(["name"]="Gustavo Dutra")
key_exists "name" "A" && echo "name é chave de \$A"

Por enquanto é isto!

Bons scripts!

Qualquer dúvida, pode comentar aqui !

Via: http://gustavodutra.com