Stream Recorder: Unterschied zwischen den Versionen

Aus TV-Browser Wiki
Wechseln zu: Navigation⧼comma-separator⧽Suche
TuxNix⧼word-separator⧽⧼parentheses⧽
TuxNix⧼word-separator⧽⧼parentheses⧽
⧼parentheses⧽
Zeile 43: Zeile 43:
 
#!/bin/bash
 
#!/bin/bash
  
##### Programm: streamrecorder Version 0.3 - May 2017
+
##### Programm: streamrecorder Version 0.4 - Juni 2017
  
 
##### From TuxNix Lizenz GPLv3 with no garanty at all.
 
##### From TuxNix Lizenz GPLv3 with no garanty at all.
Zeile 61: Zeile 61:
 
##### Benutzer Konfiguration
 
##### Benutzer Konfiguration
  
recPath=~/Videos/
+
recPath=~/MEDIEN/Videos/
  
  
Zeile 108: Zeile 108:
 
   eMonat="0"$eMonat
 
   eMonat="0"$eMonat
 
fi
 
fi
 +
 
eTag=${args[10]}
 
eTag=${args[10]}
 
if (( ${#args[10]} < 2 )) ; then
 
if (( ${#args[10]} < 2 )) ; then
Zeile 128: Zeile 129:
 
echo $sName
 
echo $sName
  
startZeit=$sStunde:$sMinute' '$sJahr-$sMonat-$sTag
+
if [ $Kanal == 'ARD' ] ; then
endZeit=$eStunde:$eMinute' '$eJahr-$eMonat-$eTag
+
    stream_url='http://daserste_live-lh.akamaihd.net/i/daserste_de@91204/master.m3u8'
 +
 
 +
elif [ $Kanal == 'alpha' ] ; then
 +
    stream_url="http://livestreams.br.de/i/bralpha_germany@119899/master.m3u8"
 +
 
 +
elif [ $Kanal == 'one' ] ; then
 +
    stream_url="http://wdr_einsfestival-lh.akamaihd.net/i/wdr_einsfestival@328300/master.m3u8"
 +
 
 +
elif [ $Kanal == 'Tagesschau' ] ; then
 +
    stream_url="http://tagesschau-lh.akamaihd.net/i/tagesschau_1@119231/master.m3u8"
 +
 
 +
elif [ $Kanal == 'Arte' ] ; then
 +
    stream_url="http://artelive-lh.akamaihd.net/i/artelive_de@393591/master.m3u8"
 +
 
 +
elif [ $Kanal == 'BR' ] ; then
 +
    stream_url="http://livestreams.br.de/i/bfsnord_germany@119898/master.m3u8"
 +
 
 +
elif [ $Kanal == 'DW' ] ; then
 +
    stream_url="http://dwstream72-lh.akamaihd.net/i/dwstream72_live@123556/master.m3u8"
 +
 
 +
elif [ $Kanal == 'hr' ] ; then
 +
    stream_url="http://live1_hr-lh.akamaihd.net/i/hr_fernsehen@75910/master.m3u8"
 +
 
 +
elif [ $Kanal == 'Kika' ] ; then
 +
    stream_url="http://kika_geo-lh.akamaihd.net/i/livetvkika_de@75114/master.m3u8"
 +
 
 +
elif [ $Kanal == 'mdr' ] ; then
 +
    stream_url="http://mdr_th_hls-lh.akamaihd.net/i/livetvmdrthueringen_de@106903/master.m3u8"
 +
 
 +
elif [ $Kanal == 'NDR' ] ; then
 +
    stream_url="http://ndr_fs-lh.akamaihd.net/i/ndrfs_nds@119224/master.m3u8"
 +
 
 +
elif [ $Kanal == 'phoenix' ] ; then
 +
    stream_url="http://zdf0910-lh.akamaihd.net/i/de09_v1@392871/master.m3u8"
 +
 
 +
elif [ $Kanal == 'rbb' ] ; then
 +
    stream_url="http://rbblive-lh.akamaihd.net/i/rbb_brandenburg@349369/master.m3u8"
 +
 
 +
elif [ $Kanal == '3sat' ] ; then
 +
    stream_url="http://zdf0910-lh.akamaihd.net/i/dach10_v1@392872/master.m3u8"
 +
 
 +
elif [ $Kanal == 'SR' ] ; then
 +
    stream_url="http://live2_sr-lh.akamaihd.net/i/sr_universal02@107595/master.m3u8"
 +
 
 +
elif [ $Kanal == 'SWR' ] ; then
 +
    stream_url="http://swrbw-lh.akamaihd.net/i/swrbw_live@196738/master.m3u8"
 +
 
 +
elif [ $Kanal == 'WDR' ] ; then
 +
    stream_url="http://wdr_fs_geo-lh.akamaihd.net/i/wdrfs_geogeblockt@112044/master.m3u8"
 +
         
 +
elif [ $Kanal == 'ZDF' ] ; then
 +
    stream_url="http://zdf1314-lh.akamaihd.net/i/de14_v1@392878/master.m3u8"
 +
 
 +
elif [ $Kanal == 'ZDFinfo' ] ; then
 +
    stream_url="http://zdf1112-lh.akamaihd.net/i/de12_v1@392882/master.m3u8"
 +
 
 +
elif [ $Kanal == 'ZDFneo' ] ; then
 +
    stream_url="http://zdf1314-lh.akamaihd.net/i/de13_v1@392877/master.m3u8"
 +
 
 +
else
 +
    echo "Abbruch: Der Sender $Kanal ist im Aufnahmeskript noch nicht gelistet"
 +
    echo "Bitte Sendernamen auch im TV-Browser ohne Leerzeichen eintragen"
 +
    exit 1
 +
fi
  
 
sysTime=`date --date='now' +%s`
 
sysTime=`date --date='now' +%s`
 
startTime=`date --date="$sJahr-$sMonat-$sTag $sStunde:$sMinute" +%s`
 
startTime=`date --date="$sJahr-$sMonat-$sTag $sStunde:$sMinute" +%s`
 +
startNow=`date --date='now' +%R' '%F`
 +
startZeit=$sStunde:$sMinute' '$sJahr-$sMonat-$sTag
 +
endZeit=$eStunde:$eMinute' '$eJahr-$eMonat-$eTag
  
 
if [ $operation == 'record' ] && (( $sysTime > $startTime )) ; then
 
if [ $operation == 'record' ] && (( $sysTime > $startTime )) ; then
  
     echo "Abbruch: Der Aufnahmebeginn liegt in der Vergangenheit!"
+
     echo "Die Aufnahme wird gestartet und nach    $recPath$sName-part.mp4    gespeichert!"
    exit 3
+
     echo "mencoder $stream_url -vid 9 -oac pcm -ovc copy -o $recPath$sName-part.mp4" | at $startNow > /dev/null 2>&1
fi
+
     echo "fuser -k -TERM $recPath$sName-part.mp4" | at $endZeit > /dev/null 2>&1
 
 
if [ $operation == 'record' ] ; then
 
 
 
    if [ $Kanal == 'ARD' ] ; then
 
        stream_url='http://daserste_live-lh.akamaihd.net/i/daserste_de@91204/master.m3u8'
 
     
 
     elif [ $Kanal == 'alpha' ] ; then
 
        stream_url="http://livestreams.br.de/i/bralpha_germany@119899/master.m3u8"
 
     
 
    elif [ $Kanal == 'one' ] ; then
 
        stream_url="http://wdr_einsfestival-lh.akamaihd.net/i/wdr_einsfestival@328300/master.m3u8"
 
     
 
    elif [ $Kanal == 'Tagesschau' ] ; then
 
        stream_url="http://tagesschau-lh.akamaihd.net/i/tagesschau_1@119231/master.m3u8"
 
     
 
    elif [ $Kanal == 'Arte' ] ; then
 
        stream_url="http://artelive-lh.akamaihd.net/i/artelive_de@393591/master.m3u8"
 
     
 
    elif [ $Kanal == 'BR' ] ; then
 
        stream_url="http://livestreams.br.de/i/bfsnord_germany@119898/master.m3u8"
 
     
 
     elif [ $Kanal == 'DW' ] ; then
 
        stream_url="http://dwstream72-lh.akamaihd.net/i/dwstream72_live@123556/master.m3u8"
 
     
 
    elif [ $Kanal == 'hr' ] ; then
 
        stream_url="http://live1_hr-lh.akamaihd.net/i/hr_fernsehen@75910/master.m3u8"
 
     
 
    elif [ $Kanal == 'Kika' ] ; then
 
        stream_url="http://kika_geo-lh.akamaihd.net/i/livetvkika_de@75114/master.m3u8"
 
     
 
    elif [ $Kanal == 'mdr' ] ; then
 
        stream_url="http://mdr_th_hls-lh.akamaihd.net/i/livetvmdrthueringen_de@106903/master.m3u8"
 
 
        
 
        
    elif [ $Kanal == 'NDR' ] ; then
+
elif [ $operation == 'record' ] && (( $sysTime <= $startTime )) ; then
        stream_url="http://ndr_fs-lh.akamaihd.net/i/ndrfs_nds@119224/master.m3u8"
 
     
 
    elif [ $Kanal == phoenix ] ; then
 
        stream_url="http://zdf0910-lh.akamaihd.net/i/de09_v1@392871/master.m3u8"
 
     
 
    elif [ $Kanal == 'rbb' ] ; then
 
        stream_url="http://rbb_live-lh.akamaihd.net/i/rbb_brandenburg@107638/master.m3u8"
 
     
 
    elif [ $Kanal == '3sat' ] ; then
 
        stream_url="http://zdf0910-lh.akamaihd.net/i/dach10_v1@392872/master.m3u8"
 
     
 
    elif [ $Kanal == 'SR' ] ; then
 
        stream_url="http://live2_sr-lh.akamaihd.net/i/sr_universal02@107595/master.m3u8"
 
     
 
    elif [ $Kanal == 'SWR' ] ; then
 
        stream_url="http://swrbw-lh.akamaihd.net/i/swrbw_live@196738/master.m3u8"
 
     
 
    elif [ $Kanal == 'WDR' ] ; then
 
        stream_url="http://wdr_fs_geo-lh.akamaihd.net/i/wdrfs_geogeblockt@112044/master.m3u8"
 
     
 
    elif [ $Kanal == 'ZDF' ] ; then
 
        stream_url="http://zdf1314-lh.akamaihd.net/i/de14_v1@392878/master.m3u8"
 
     
 
    elif [ $Kanal == 'ZDFinfo' ] ; then
 
        stream_url="http://zdf1112-lh.akamaihd.net/i/de12_v1@392882/master.m3u8"
 
     
 
    elif [ $Kanal == 'ZDFneo' ] ; then
 
        stream_url="http://zdf1314-lh.akamaihd.net/i/de13_v1@392877/master.m3u8"
 
     
 
    else
 
        echo "Abbruch: Der Sender $Kanal ist im Aufnahmeskript noch nicht gelistet"
 
        echo "Bitte Sendernamen auch im TV-Browser ohne Leerzeichen eintragen"
 
    exit 1
 
      fi
 
  
     echo 'Erstelle at-Jobs'
+
     echo "Die Aufnahme wurde veranlasst und wird unter  $recPath$sName.mp4    abgespeichert werden!"
     echo "mencoder $stream_url -vid 9 -oac pcm -ovc copy -o $recPath$sName.mp4" | at $startZeit
+
     echo "mencoder $stream_url -vid 9 -oac pcm -ovc copy -o $recPath$sName.mp4" | at $startZeit > /dev/null 2>&1
     echo "fuser -k -TERM $recPath$sName.mp4" | at $endZeit
+
     echo "fuser -k -TERM $recPath$sName.mp4" | at $endZeit > /dev/null 2>&1
 
 
 
 
 
elif [ $operation == 'delete' ] ; then
 
elif [ $operation == 'delete' ] ; then
 
    
 
    
 
     Monate=([1]=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
 
     Monate=([1]=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
 
+
 
 
     sTag=${args[5]}
 
     sTag=${args[5]}
 
     if (( ${#sTag} < 2 )) ; then
 
     if (( ${#sTag} < 2 )) ; then
Zeile 229: Zeile 228:
 
     if (( $sysTime >= $startTime )) ; then
 
     if (( $sysTime >= $startTime )) ; then
 
        
 
        
         fuser -k -TERM $recPath$sName.mp4
+
         fuser -k -TERM $recPath$sName.mp4 > /dev/null 2>&1
 +
        fuser -k -TERM $recPath$sName-part.mp4 > /dev/null 2>&1
 
         echo "Die laufende Aufnahme wird beendet!"
 
         echo "Die laufende Aufnahme wird beendet!"
 
        
 
        
Zeile 237: Zeile 237:
 
         Job=`cut -f1 atq.txt`
 
         Job=`cut -f1 atq.txt`
 
         atrm $Job
 
         atrm $Job
         echo "Job $Job gelöscht"
+
         echo "Der at Start-Job $Job wurde gelöscht!"
 
        
 
        
 
     fi
 
     fi
Zeile 244: Zeile 244:
 
     Job=`cut -f1 atq.txt`
 
     Job=`cut -f1 atq.txt`
 
     atrm $Job
 
     atrm $Job
     echo "Job $Job gelöscht"
+
     echo "Der at Stop-Job $Job wurde gelöscht!"
 
    
 
    
 
 
 
else
 
else
echo "Abbruch: Der Operator $operator ist nicht korrekt. Bitte überprüfe die Parameter im TV-Browser"
+
    echo "Abbruch: Der Operator $operation ist nicht korrekt. Bitte überprüfe die Parameter im TV-Browser"
exit 2
+
    exit 2
 
fi
 
fi
 
</nowiki>
 
</nowiki>
  
 
Anregungen und Verbesserungsvorschläge zum Script können im [http://hilfe.tvbrowser.org/viewtopic.php?f=43&t=18036 Forum] ausgetauscht werden.
 
Anregungen und Verbesserungsvorschläge zum Script können im [http://hilfe.tvbrowser.org/viewtopic.php?f=43&t=18036 Forum] ausgetauscht werden.

Version vom 9. Juni 2017, 20:39 Uhr

Stream Recorder ist ein Script zur zeitgesteuerten Aufnahme von TV Livestreams aus dem TV-Browser heraus.

Vorraussetzungen

  • Internetanschluß
  • Linux Pc
  • at (Paket)
  • mencoder (Paket)

Installation

Benötigt werden die Pakete at und mencoder.

Der at Dienst wird von systemd gesteuert. Zur Aktivuerung gibt man auf der Konsole (sudo systemctl enable --now atd.service) ein.

Danach das Script kopieren und z.B. mit dem Namen (streamrecoder) abspeichern. Mit (chmod a+rx streamrecorder) wird das Script ausführbar gemacht.

Im Tv-Browser im Menu Extras > Aufnahmesteuerung > Geräte > Gerät-hinzufügen den Standardtreiber auswählen. Beim Eintrag Gerät kann ein beliebiger Namen angegeben werden.

Das Script (streamrecoder) wird hier als "Applikation" angegeben.

Parameter für die Aufnahme:
record {start_hour} {start_minute} {start_year} {start_month} {start_day} {end_hour} {end_minute} {end_year} {end_month} {end_day} {channel_name} "{title}" {production_year}

Parameter für das Löschen:
delete {start_hour} {start_minute} {start_year} {start_month} {start_day} {end_hour} {end_minute} {end_year} {end_month} {end_day} {channel_name} "{title}" {production_year}

Bei den Einstellungen können mehere Aufnahme gleichzeitig erlaubt werden.

Die Sender URL der öffentlich rechtlichen Sender sind im Script gelistet (Stand May 2017). Man kann beliebig viele Sender hinzufügen. Die Namen der Sender sollte im TV-Browser und im Script miteinander übereinstimmen. Leerstellen im Sendernamen werden nicht unterstützt. Der Speicherort der Aufnahme ist auf ~/Video vor eingestellt und kann Im Script in der Benutzer Konfiguration auf eigene Bedürfnisse angepasst werden.

Benutzung

Die Benutzung ist eigentlich selbsterklärend. Mit der rechten Maustaste wählt man eine Sendung aus. Mit der Linken Maustaste wird auf Aufnahme gedrückt. Zum Rückgängig machen der Aufnahmejobs geht man entsprechend vor. Ein Dialogfenster von TV-Browser öffnet sich und gibt jeweils Auskunft über den Programmablauf.

Hintergrund

Zur Zeitsteuerung habe ich at ausgewählt. Cronie und systemd.timers hätten sich nicht so gut für diesen Zweck geeignet. Wer wissen möchte wie die Jobs gespeichert werden, kann auf der Konsole die Befehle atq, at -c <job> und atrm <job> mal ausprobieren. Für das eigentliche Streaming ist mencoder verantwortlich.

Viel Spaß damit TuxNix

Das Script

#!/bin/bash

##### Programm: streamrecorder Version 0.4 - Juni 2017

##### From TuxNix Lizenz GPLv3 with no garanty at all.


##### Parameter für Tv-Browser: Aufnahme
#record {start_hour} {start_minute} {start_year} {start_month} {start_day} {end_hour} {end_minute} {end_year} {end_month} {end_day} {channel_name} "{title}"  {production_year}

##### Parameter für Tv-Browser: Löschen
#delete {start_hour} {start_minute} {start_year} {start_month} {start_day} {end_hour} {end_minute} {end_year} {end_month} {end_day} {channel_name} "{title}"  {production_year}

##### benötigt die Programm-Pakete
#at
#mencoder


##### Benutzer Konfiguration

recPath=~/MEDIEN/Videos/


##### Das Script

args=("$@")

operation=${args[0]}

sStunde=${args[1]}
if (( ${#sStunde} < 2 )) ; then
   sStunde="0"${args[1]}
fi

sMinute=${args[2]}
if (( ${#sMinute} < 2 )) ; then
   sMinute="0"$sMinute
fi

sJahr=${args[3]}

sMonat=${args[4]}
if (( ${#sMonat} < 2 )) ; then
   sMonat="0"$sMonat
fi

sTag=${args[5]}
if (( ${#sTag} < 2 )) ; then
   sTag="0"$sTag
fi

eStunde=${args[6]}
if (( ${#eStunde} < 2 )) ; then
   eStunde="0"$eStunde
fi

eMinute=${args[7]}
if (( ${#eMinute} < 2 )) ; then
   eMinute="0"$eMinute
fi

eJahr=${args[8]}

eMonat=${args[9]}
if (( ${#eMonat} < 2 )) ; then
   eMonat="0"$eMonat
fi

eTag=${args[10]}
if (( ${#args[10]} < 2 )) ; then
   eTag="0"${args[10]}
fi

Kanal=${args[11]}

sTitel=`echo ${args[12]} | sed 's/ /_/g'`
sTitel=`echo $sTitel | sed 's!/!-!g'`
sTitel=`echo $sTitel | sed 's![()"]!!g'`
sTitel=`echo $sTitel | sed "s!\x27!!g"`
sTitel=`echo $sTitel | sed "s!&!u!g"`

if (( ${#args[13]} > 3 )) ; then
   sProdJahr="-${args[13]}"
fi

sName=$sTitel$sProdJahr
echo $sName

if [ $Kanal == 'ARD' ] ; then
    stream_url='http://daserste_live-lh.akamaihd.net/i/daserste_de@91204/master.m3u8'

elif [ $Kanal == 'alpha' ] ; then
    stream_url="http://livestreams.br.de/i/bralpha_germany@119899/master.m3u8"

elif [ $Kanal == 'one' ] ; then
    stream_url="http://wdr_einsfestival-lh.akamaihd.net/i/wdr_einsfestival@328300/master.m3u8"

elif [ $Kanal == 'Tagesschau' ] ; then
    stream_url="http://tagesschau-lh.akamaihd.net/i/tagesschau_1@119231/master.m3u8"

elif [ $Kanal == 'Arte' ] ; then
    stream_url="http://artelive-lh.akamaihd.net/i/artelive_de@393591/master.m3u8"

elif [ $Kanal == 'BR' ] ; then
    stream_url="http://livestreams.br.de/i/bfsnord_germany@119898/master.m3u8"

elif [ $Kanal == 'DW' ] ; then
    stream_url="http://dwstream72-lh.akamaihd.net/i/dwstream72_live@123556/master.m3u8"

elif [ $Kanal == 'hr' ] ; then
    stream_url="http://live1_hr-lh.akamaihd.net/i/hr_fernsehen@75910/master.m3u8"

elif [ $Kanal == 'Kika' ] ; then
    stream_url="http://kika_geo-lh.akamaihd.net/i/livetvkika_de@75114/master.m3u8"

elif [ $Kanal == 'mdr' ] ; then
    stream_url="http://mdr_th_hls-lh.akamaihd.net/i/livetvmdrthueringen_de@106903/master.m3u8"

elif [ $Kanal == 'NDR' ] ; then
    stream_url="http://ndr_fs-lh.akamaihd.net/i/ndrfs_nds@119224/master.m3u8"

elif [ $Kanal == 'phoenix' ] ; then
    stream_url="http://zdf0910-lh.akamaihd.net/i/de09_v1@392871/master.m3u8"

elif [ $Kanal == 'rbb' ] ; then
    stream_url="http://rbblive-lh.akamaihd.net/i/rbb_brandenburg@349369/master.m3u8"

elif [ $Kanal == '3sat' ] ; then
    stream_url="http://zdf0910-lh.akamaihd.net/i/dach10_v1@392872/master.m3u8"

elif [ $Kanal == 'SR' ] ; then
    stream_url="http://live2_sr-lh.akamaihd.net/i/sr_universal02@107595/master.m3u8"

elif [ $Kanal == 'SWR' ] ; then
    stream_url="http://swrbw-lh.akamaihd.net/i/swrbw_live@196738/master.m3u8"

elif [ $Kanal == 'WDR' ] ; then
    stream_url="http://wdr_fs_geo-lh.akamaihd.net/i/wdrfs_geogeblockt@112044/master.m3u8"
           
elif [ $Kanal == 'ZDF' ] ; then
    stream_url="http://zdf1314-lh.akamaihd.net/i/de14_v1@392878/master.m3u8"

elif [ $Kanal == 'ZDFinfo' ] ; then
    stream_url="http://zdf1112-lh.akamaihd.net/i/de12_v1@392882/master.m3u8"

elif [ $Kanal == 'ZDFneo' ] ; then
    stream_url="http://zdf1314-lh.akamaihd.net/i/de13_v1@392877/master.m3u8"
   
else
    echo "Abbruch: Der Sender $Kanal ist im Aufnahmeskript noch nicht gelistet"
    echo "Bitte Sendernamen auch im TV-Browser ohne Leerzeichen eintragen"
    exit 1
fi

sysTime=`date --date='now' +%s`
startTime=`date --date="$sJahr-$sMonat-$sTag $sStunde:$sMinute" +%s`
startNow=`date --date='now' +%R' '%F`
startZeit=$sStunde:$sMinute' '$sJahr-$sMonat-$sTag
endZeit=$eStunde:$eMinute' '$eJahr-$eMonat-$eTag

if [ $operation == 'record' ] && (( $sysTime > $startTime )) ; then

    echo "Die Aufnahme wird gestartet und nach    $recPath$sName-part.mp4    gespeichert!"
    echo "mencoder $stream_url -vid 9 -oac pcm -ovc copy -o $recPath$sName-part.mp4" | at $startNow > /dev/null 2>&1
    echo "fuser -k -TERM $recPath$sName-part.mp4" | at $endZeit > /dev/null 2>&1
       
elif [ $operation == 'record' ] && (( $sysTime <= $startTime )) ; then

    echo "Die Aufnahme wurde veranlasst und wird unter   $recPath$sName.mp4    abgespeichert werden!"
    echo "mencoder $stream_url -vid 9 -oac pcm -ovc copy -o $recPath$sName.mp4" | at $startZeit > /dev/null 2>&1
    echo "fuser -k -TERM $recPath$sName.mp4" | at $endZeit > /dev/null 2>&1
elif [ $operation == 'delete' ] ; then
  
    Monate=([1]=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
   
    sTag=${args[5]}
    if (( ${#sTag} < 2 )) ; then
    sTag=" "$sTag
    fi
   
    eTag=${args[10]}
    if (( ${#eTag} < 2 )) ; then
    eTag=" "$eTag
    fi
   
    if (( $sysTime >= $startTime )) ; then
       
        fuser -k -TERM $recPath$sName.mp4 > /dev/null 2>&1
        fuser -k -TERM $recPath$sName-part.mp4 > /dev/null 2>&1
        echo "Die laufende Aufnahme wird beendet!"
       
    else
   
        atq | grep "${Monate[${args[4]}]} $sTag $sStunde:$sMinute:00 $sJahr" > atq.txt
        Job=`cut -f1 atq.txt`
        atrm $Job
        echo "Der at Start-Job $Job wurde gelöscht!"
       
    fi
   
    atq | grep "${Monate[${args[9]}]} $eTag $eStunde:$eMinute:00 $eJahr" > atq.txt
    Job=`cut -f1 atq.txt`
    atrm $Job
    echo "Der at Stop-Job $Job wurde gelöscht!"
   
else
    echo "Abbruch: Der Operator $operation ist nicht korrekt. Bitte überprüfe die Parameter im TV-Browser"
    exit 2
fi

Anregungen und Verbesserungsvorschläge zum Script können im Forum ausgetauscht werden.