diff --git a/rechnung.sh b/rechnung.sh index b0c8d3f..1d2fc7d 100755 --- a/rechnung.sh +++ b/rechnung.sh @@ -24,7 +24,7 @@ RUBBER_BIN=$(which rubber 2>/dev/null || echo "rubber") EXECUTABLES_TO_CHECK="$BC_BIN $TR_BIN $SED_BIN $CUT_BIN $TPUT_BIN $DATE_BIN $PDFLATEX_BIN $RUBBER_BIN" GENPDF="" -if [ -x $RUBBER_BIN ]; then +if [ -x "$RUBBER_BIN" ]; then GENPDF="$RUBBER_BIN -d " else GENPDF="$PDFLATEX_BIN -halt-on-error " @@ -58,11 +58,11 @@ LFDNR="" NUMBER_OF_COLORS=$($TPUT_BIN colors) COLORED_OUTPUT=0 -RED="\\033[1;31m" -GREEN="\\033[1;32m" -YELLOW="\\033[1;33m" -BLUE="\\033[1;34m" -NORMAL="\\033[0;39m" +RED="$(tput bold)$(tput setaf 1)" +GREEN="$(tput bold)$(tput setaf 2)" +YELLOW="$(tput bold)$(tput setaf 3)" +BLUE="$(tput bold)$(tput setaf 4)" +NORMAL="$(tput bold)$(tput sgr0)" # Diverse Checks @@ -70,7 +70,7 @@ NORMAL="\\033[0;39m" check_readable() { - printf "\n[+] Datei \"$1\" ist lesbar ..." + printf "\n[+] Datei %s ist lesbar ..." "$1" if [ -f "$1" ] && [ -r "$1" ] then print_ok @@ -82,14 +82,14 @@ check_readable() { check_binaries() { - local program="" - local binaries=$* + program="" + binaries=$* for program in $binaries; do - printf "\n[+] Suche nach Programm $program ..." + printf "\n[+] Suche nach Programm %s ..." "$program" if [ ! -x "$program" ]; then print_failed - printf "\n[-] Das Programm \"$program\" wird benötigt, aber nicht gefunden." + printf "\n[-] Das Programm \"%s\" wird benötigt, aber nicht gefunden." "$program" quit 3 else print_ok @@ -99,7 +99,7 @@ check_binaries() { is_option() ( - local line="$*" + line="$*" if [ "${line#*=}" != "$line" ]; then return 0 @@ -114,7 +114,7 @@ is_option() ( print_failed() { if [ "$COLORED_OUTPUT" -eq 1 ]; then - printf "$RED Failed$NORMAL" + printf "%s Failed%s" "$RED" "$NORMAL" else printf " Failed" fi @@ -123,7 +123,7 @@ print_failed() { print_ok() { if [ "$COLORED_OUTPUT" -eq 1 ]; then - printf "$GREEN OK$NORMAL" + printf "%s OK%s" "$GREEN" "$NORMAL" else printf " OK" fi @@ -131,12 +131,12 @@ print_ok() { print_warn() { - local msg=$* + msg=$* if [ "$COLORED_OUTPUT" -eq 1 ]; then - echo -e "$YELLOW[-]$NORMAL $msg" + echo "$YELLOW[-]$NORMAL $msg" else - echo -e "[-] $msg" + echo "[-] $msg" fi } @@ -146,7 +146,7 @@ print_warn() { trim_line() { set -f - set -- $* + set -- "$*" LINE_BUFFER=$(printf '%s' "$*") set +f } @@ -154,7 +154,7 @@ trim_line() { trim_key() { set -f - set -- $* + set -- "$*" KEY_BUFFER=$(printf '%s' "$*") set +f } @@ -162,7 +162,7 @@ trim_key() { trim_value() { set -f - set -- $* + set -- "$*" VALUE_BUFFER=$(printf '%s' "$*") set +f } @@ -170,7 +170,7 @@ trim_value() { reset_values() { - echo -e "\n[+] Initialisiere Felder für Rechnung neu." + printf "\n[+] Initialisiere Felder für Rechnung neu." LINE_BUFFER="" KEY_BUFFER="" VALUE_BUFFER="" @@ -187,11 +187,11 @@ reset_values() { set_value() { - local key=$(echo "$*" | $CUT_BIN -d "=" -f1) - local value=$(echo "$*" | $CUT_BIN -d "=" -f2) + key=$(echo "$*" | $CUT_BIN -d "=" -f1) + value=$(echo "$*" | $CUT_BIN -d "=" -f2) - trim_key $key - trim_value $value + trim_key "$key" + trim_value "$value" case $KEY_BUFFER in kunde) KUNDE="$VALUE_BUFFER";; adresse) ADRESSE="$VALUE_BUFFER";; @@ -207,20 +207,20 @@ set_value() { make_invoice() { - local dead_days="14" - if [ $(date +%u) -gt 5 ]; then + dead_days="14" + if [ "$(date +%u)" -gt 5 ]; then dead_days="16" fi - local month_ascii=$(date '+%B') - local inv_day=$(date '+%j') - local inv_date=$(date '+%Y%m%d') - local inv_dead=$(date -d "+${dead_days}days" '+%d.\\\\,%m.\\\\,%Y') - local rechnungsnummer="$inv_date--$LFDNR" - local subject="Rechnung zu $SHORT" - local filename="$(date '+%Y%m%d')_Rechnung_$(echo "$month_ascii")_$(echo "$KUNDE" | $TR_BIN " " "_").ltx" - local buffer="$KUNDE; $ADRESSE" - local anschrift="$(echo "$buffer" | sed 's/; /\\\\\\\\\\\\\\ /g')" + month_ascii=$(date '+%B') + inv_day=$(date '+%j') + inv_date=$(date '+%Y%m%d') + inv_dead=$(date -d "+${dead_days}days" '+%d.\\\\,%m.\\\\,%Y') + rechnungsnummer="$inv_date--$LFDNR" + subject="Rechnung zu $SHORT" + filename="$(date '+%Y%m%d')_Rechnung_$(echo "$month_ascii")_$(echo "$KUNDE" | $TR_BIN " " "_").ltx" + buffer="$KUNDE; $ADRESSE" + anschrift="$(echo "$buffer" | sed 's/; /\\\\\\\\\\\\\\ /g')" echo "[+] Erstelle Rechnung: $filename" echo -n "s!#SUBJECT#!" >$SEDFILE; echo "$subject!" >>$SEDFILE @@ -231,11 +231,11 @@ make_invoice() { echo -n "s!#POSITION#!" >>$SEDFILE; echo "$POSITION!" >>$SEDFILE echo -n "s!#BETRAG#!" >>$SEDFILE; echo "$BETRAG!" >>$SEDFILE echo -n "s!#DEADLINE#!" >>$SEDFILE; echo "$inv_dead!" >>$SEDFILE - cp $TEMPLATEFILE $filename - $SED_BIN -i -f $SEDFILE $filename - $GENPDF $filename - if [ -x $RUBBER_BIN ]; then - $RUBBER_BIN --clean $filename + cp "$TEMPLATEFILE" "$filename" + $SED_BIN -i -f "$SEDFILE" "$filename" + $GENPDF "$filename" + if [ -x "$RUBBER_BIN" ]; then + "$RUBBER_BIN" --clean "$filename" fi if [ $? -eq 0 ]; then @@ -247,8 +247,8 @@ make_invoice() { proced_ini_line() { - local line=$* - local first=$(echo "$line" | cut -c1-1) + line=$* + first=$(echo "$line" | cut -c1-1) # leerzeilen ignorieren if [ "$line" = "" ]; then @@ -273,10 +273,10 @@ proced_ini_line() { # alle anderen zeilen else - is_option $line + is_option "$line" if [ $? -eq 0 ] then - set_value $line + set_value "$line" else print_warn "Invalid syntax: $line" fi @@ -284,9 +284,10 @@ proced_ini_line() { } quit() { - printf "\n$BLUE" - printf "[-] Exit$NORMAL\n" - exit $1 + printf "\n" + print "$BLUE" + printf "[-] Exit%s\n" "$NORMAL" + exit 1 } @@ -297,24 +298,24 @@ echo "= Rechnung v$PROGRAMM_VERSION =" echo "===================" # Verschiedene Basic Checks -if [ -n $NUMBER_OF_COLORS ] && [ "$NUMBER_OF_COLORS" -ge 8 ]; then +if [ -n "$NUMBER_OF_COLORS" ] && [ "$NUMBER_OF_COLORS" -ge 8 ]; then COLORED_OUTPUT=1 fi -if [ $(id -u) -eq 0 ]; then +if [ "$(id -u)" -eq 0 ]; then echo "$0: Das Skript darf nicht als Root ausgeführt werden." exit 1 fi -check_binaries $EXECUTABLES_TO_CHECK -check_readable $RECHNUNGSFILE -check_readable $TEMPLATEFILE +check_binaries "$EXECUTABLES_TO_CHECK" +check_readable "$RECHNUNGSFILE" +check_readable "$TEMPLATEFILE" printf "\n" # Kundendatei einlesen und rechnungen erstellen while IFS= read -r rawline do - trim_line $rawline - proced_ini_line $LINE_BUFFER -done <$RECHNUNGSFILE + trim_line "$rawline" + proced_ini_line "$LINE_BUFFER" +done < "$RECHNUNGSFILE"