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
    ARBEITSDAUER=8.3
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 Minuten arbeiten."
echo "🕔 Dein Feierabend ist um ca. $FEIERABEND."

Skript, bei dem die Uhrzeit als Parameter beim Aufruf übergeben wird:

#!/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

# --- Startzeit in 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
    ARBEITSDAUER=8.3
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 ---
STD=$((REST_SEKUNDEN / 3600))
MIN=$(( (REST_SEKUNDEN % 3600) / 60 ))
FEIERABEND=$(date -d "@$ENDZEIT_SEK" +"%H:%M")

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