Wie lange noch?

Skript mit interaktiver Abfrage des Beginns der Arbeitszeit:

#!/bin/bash
# Eingabe: Startzeit abfragen
read -p "Arbeitsbeginn (HH:MM): " STARTZEIT

# Aktuelles Datum und Uhrzeit
JETZT=$(date +%s)
WOCHENTAG=$(date +%u) # 1 = Montag, 7 = Sonntag

# Startzeit als Sekunden seit Epoche
STARTZEIT_SEK=$(date -d "$STARTZEIT" +%s)

# Arbeitsdauer je nach Wochentag (in Stunden)
if [ "$WOCHENTAG" -eq 4 ]; then
    # Donnerstag
    ARBEITSDAUER=10.75
else
    # Montag bis Mittwoch, Freitag; Soll-Arbeitszeit=8.3h, aber für korrekte Berechnung muss die halbe Stunde Mittag addiert werden, darum hier 8.8h
    ARBEITSDAUER=8.8
fi

# Zielzeit berechnen
SEKUNDEN_ZU_ARBEITEN=$(awk "BEGIN {print int($ARBEITSDAUER * 3600)}")
ENDZEIT_SEK=$(($STARTZEIT_SEK + $SEKUNDEN_ZU_ARBEITEN))

# Differenz zur aktuellen Uhrzeit
REST_SEKUNDEN=$(($ENDZEIT_SEK - $JETZT))


# Bereits Feierabend?
if [ "$REST_SEKUNDEN" -le 0 ]; then
    echo "✅ Feierabend! Du hast deine Zeit erfüllt oder überzogen."
    exit 0
fi

# Ausgabe der verbleibenden Zeit
STD=$(echo "$REST_SEKUNDEN / 3600" | bc)
MIN=$(echo "($REST_SEKUNDEN % 3600) / 60" | bc)

FEIERABEND=$(date -d "@$ENDZEIT_SEK" +"%H:%M")

echo "🕒 Du musst noch $STD Stunden und $MIN Minute(n) arbeiten."
echo "🕔 Dein Feierabend ist um ca. $FEIERABEND."

Skript, bei dem die Uhrzeit als Parameter beim Aufruf übergeben wird und sowohl Schlado als auch kurzer Freitag berücksichtig werden:

#!/bin/bash

# --- Übergabe prüfen ---
if [ -z "$1" ]; then
    echo "❌ Bitte gib die Startzeit als Argument an."
    echo "🧭 Beispiel: $0 07:30"
    exit 1
fi

STARTZEIT="$1"

# --- Eingabe validieren ---
if ! date -d "$STARTZEIT" &>/dev/null; then
    echo "❌ Ungültige Zeitangabe. Format: HH:MM (z. B. 07:45)"
    exit 1
fi

# --- Aktuelles Datum und Uhrzeit ---
JETZT=$(date +%s)
WOCHENTAG=$(date +%u) # 1 = Montag, 7 = Sonntag
HEUTE=$(date +%Y-%m-%d)

# --- Startzeit in Sekunden seit Epoche ---
STARTZEIT_SEK=$(date -d "$HEUTE $STARTZEIT" +%s)

# --- Arbeitsdauer / Endzeit je nach Wochentag ---
if [ "$WOCHENTAG" -eq 4 ]; then
    # Donnerstag
    ARBEITSDAUER=10.75
    SEKUNDEN_ZU_ARBEITEN=$(awk "BEGIN {print int($ARBEITSDAUER * 3600)}")
    ENDZEIT_SEK=$((STARTZEIT_SEK + SEKUNDEN_ZU_ARBEITEN))
elif [ "$WOCHENTAG" -eq 5 ]; then
    # Freitag: Kernarbeitszeit 08:00–12:00
    ENDZEIT_SEK=$(date -d "$HEUTE 12:00" +%s)
else
    # Montag bis Mittwoch
    ARBEITSDAUER=8.8
    SEKUNDEN_ZU_ARBEITEN=$(awk "BEGIN {print int($ARBEITSDAUER * 3600)}")
    ENDZEIT_SEK=$((STARTZEIT_SEK + SEKUNDEN_ZU_ARBEITEN))
fi

# --- Differenz zur aktuellen Uhrzeit ---
REST_SEKUNDEN=$((ENDZEIT_SEK - JETZT))

# --- Bereits Feierabend? ---
if [ "$REST_SEKUNDEN" -le 0 ]; then
    echo "✅ Feierabend! Du hast deine Zeit erfüllt oder überzogen."
    exit 0
fi

# --- Ausgabe ---
STD=$((REST_SEKUNDEN / 3600))
MIN=$(( (REST_SEKUNDEN % 3600) / 60 ))
FEIERABEND=$(date -d "@$ENDZEIT_SEK" +"%H:%M")

echo "🕒 Du musst noch $STD Stunden und $MIN Minute(n) arbeiten."
echo "🕔 Dein Feierabend ist um ca. $FEIERABEND."