]> arthur.barton.de Git - ax-unix.git/blob - lib/ax/ax-common.sh
ax-common.sh: Correctly quote printf statement
[ax-unix.git] / lib / ax / ax-common.sh
1 #!/bin/sh
2 #
3 # ax-common.sh -- Common Functions for Shell Scripts
4 # Copyright (c)2013-2017 Alexander Barton (alex@barton.de)
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11
12 # "ax_common_sourced" is a flag and stores the "API version" of "ax-common.sh",
13 # too. It should be incremented each time the public API changes!
14 # shellcheck disable=SC2034
15 ax_common_sourced=2
16
17 # Display a colored message (a plain message, when not writing to a terminal).
18 #  $1    Level: -=title, 0=ok, 1=warning, 2=error.
19 #  $2    Word(s) to highlight.
20 #  $3-n  Remaining word(s). [optional]
21 ax_msg1() {
22         if [ -t 1 ]; then
23                 # writing to a terminal ...
24                 case "$1" in
25                         "0")    c="32"; shift; ;;       # green
26                         "1")    c="33"; shift; ;;       # yellow
27                         "2")    c="31"; shift; ;;       # red
28                         "-")    c="1";  shift; ;;       # bold
29                         *)      c="0";
30                 esac
31                 # print colored word(s):
32                 printf "\\033[0;%sm%s\\033[0m " "${c}" "${1}"
33         else
34                 # print plain text:
35                 printf "%s " "${1}"
36         fi
37         shift
38         # print remaining word(s) and trailing newline:
39         echo "${*}"
40 }
41
42 # Display a colored message.
43 #  $1    Level, see ax_msg1 function.
44 #  $2-n  Word(s) to highlight.
45 ax_msg() {
46         level="$1"
47         shift
48         ax_msg1 "$level" "$*"
49 }
50
51 # Display an error message to stderr.
52 #  [-l]  Log message to syslog, too.
53 #  $1-n  Error message.
54 ax_error() {
55         if [ "$1" = "-l" ]; then
56                 shift
57                 if [ -n "$NAME" ]; then
58                         logger -t "$NAME" "$*"
59                 else
60                         logger "$*"
61                 fi
62         fi
63         ax_msg1 2 "$*" >&2
64 }
65
66 # Abort the script with an error message and exit code 1.
67 #  [-l]  Log message to syslog, too.
68 #  $1    Error message [optional]. Will be formatted as "Error: %s Aborting!".
69 #        if no error message is given, "Aborting!" will be printed.
70 ax_abort() {
71         if [ "$1" = "-l" ]; then
72                 log_param="-l"
73                 shift
74         else
75                 unset log_param
76         fi
77         if [ $# -gt 0 ]; then
78                 ax_error $log_param "Error: $* Aborting!"
79         else
80                 ax_error $log_param "Aborting!"
81         fi
82         exit 1
83 }
84
85 # Display a debug message, when debug mode is enabled, that is, the environment
86 # variable "DEBUG" is set.
87 ax_debug() {
88         [ -n "$DEBUG" ] && ax_msg1 1 "DEBUG:" "$*"
89 }