Vous n'êtes pas identifié(e).
J'ai régulièrement le besoin d'écrire des scripts shell un peu évolués. Il y a quelques mois, j'ai commencé à travailler sur un modèle que je met régulièrement à jour. Aujourd'hui, j'ai travaillé sur la couche pour gérer les logs et c'est pourquoi j'écris cet article.
JavaScript error: SecurityError: The operation is insecure. (https://umami.deblan.org/umami.js @ 1:0). Open browser console to see more details.
97 lignes
1.6 KiB
Bash
#!/bin/shset -eu
usage() {
printf "Usage: %s [-l DEBUG_LEVEL] [-h]\n" "$0"
}help() {
cat << EOH
SYNOPSIS
$0 [-l DEBUG_LEVEL] [-h]DESCRIPTION
$0 does things!
OPTIONS
-h Show this help
-l debug|info|notice|warning|error
Debug level
EOH
}on_interrupt() {
log -l notice ""
log -l notice "Process aborted!"exit 130
}main() {
while getopts "l:h" option; do
case "${option}" in
h) help; exit 0;;
l) LOG_VERBOSE="$OPTARG";;
?) log -l error "$(usage)"; exit 1;;
esac
done# log [-t] [-l debug|info|notice|warning|error] message
exit 0
}log() {
LOG_VERBOSE="${LOG_VERBOSE:-info}"
LEVEL=info
TIME=while getopts "tl:" option; do
case "${option}" in
l) LEVEL="$OPTARG"; shift $((OPTIND-1));;
t) TIME="$(printf "[%s] " "$(date +'%Y-%m-%dT%H:%M:%S.%s')")"; shift $((OPTIND-1));;
*) exit 1;;
esac
doneif [ -t 2 ] && [ -z "${NO_COLOR-}" ]; then
case "${LEVEL}" in
debug) COLOR="$(tput setaf 3)";;
notice) COLOR="$(tput setaf 4)";;
warning) COLOR="$(tput setaf 5)";;
error) COLOR="$(tput setaf 1)";;
*) COLOR="$(tput sgr0)";;
esac
ficase "${LEVEL}" in
debug) LEVEL=100;;
notice) LEVEL=250;;
warning) LEVEL=300;;
error) LEVEL=400;;
*) LEVEL=200;;
esaccase "${LOG_VERBOSE}" in
debug) LOG_VERBOSE_VALUE=100;;
notice) LOG_VERBOSE_VALUE=250;;
warning) LOG_VERBOSE_VALUE=300;;
error) LOG_VERBOSE_VALUE=400;;
*) LOG_VERBOSE_VALUE=200;;
esacif [ $LEVEL -ge $LOG_VERBOSE_VALUE ]; then
printf "%s\n" "$*" | while IFS='' read -r LINE; do
printf "%s%s%s\n" "${COLOR:-}" "${TIME:-}" "$LINE" >&2
done
fi
}trap on_interrupt INT
main "$@"
Ce modèle contient les fonctions usage et help pour décrire le fonctionnement du programme. La fonction on_interrupt permet de gérer le signal SIGINT quand le programme est interrompu.
La fonction main est la fonction qui contient le code principal du script. Elle contient la gestion des paramètres passés au script. Par défaut, plusieurs y sont déjà intégrés : -l pour définir le niveau de log désiré et -h pour afficher l'aide.
Enfin, il y a la fonction log pour afficher des messages de debug avec différents niveaux de criticité. Cela permet de générer des messages qui seront affichés ou pas selon les besoins. Les messages sont colorés selon le niveau de criticité et ils sont redirigés vers stderr. Il est également possible d'ajouter la date.
La suite sur le DeblanBlog
“ Aujourd'hui plus qu'hier et bien moins que demain „
|
#1 Le 23/05/2023, à 08:50 |
---|---|
|
Simon Vieille a écrit :
La suite sur le DeblanBlog “ Aujourd'hui plus qu'hier et bien moins que demain „ |
Hors ligne |
Hors ligne
L'amour est comme un jardin, il doit se cultiver chaque jour pour donner le meilleur de lui-même
|
#2 Le 23/05/2023, à 08:56 |
---|---|
|
L'amour est comme un jardin, il doit se cultiver chaque jour pour donner le meilleur de lui-même |
Hors ligne |
Hors ligne
“ Aujourd'hui plus qu'hier et bien moins que demain „
|
#3 Le 23/05/2023, à 08:58 |
---|---|
|
“ Aujourd'hui plus qu'hier et bien moins que demain „ |
Hors ligne |
Hors ligne