{"id":208559,"date":"2024-01-23T15:38:26","date_gmt":"2024-01-23T15:38:26","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/wie-dateien-von-urls-mit-bash-skript-herunterladen\/"},"modified":"2024-02-28T21:53:23","modified_gmt":"2024-02-28T21:53:23","slug":"wie-dateien-von-urls-mit-bash-skript-herunterladen","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/de\/script-hub\/wie-dateien-von-urls-mit-bash-skript-herunterladen\/","title":{"rendered":"Wie Sie Dateien von URLs mit einem Bash-Skript herunterladen"},"content":{"rendered":"<p>In der dynamischen IT-Umgebung von heute sind Automatisierung und Skripting unverzichtbare Tools f\u00fcr IT-Experten und <a href=\"https:\/\/www.ninjaone.com\/de\/was-ist-ein-msp\">Managed Service Providers (MSPs)<\/a>. Egal ob es um Bereitstellung von Anwendungen, Management der Infrastruktur oder Fehlerbehebung geht, Skripte k\u00f6nnen unz\u00e4hlige Stunden manueller Arbeit einsparen, Effizienz steigern und menschliche Fehler reduzieren. Eine h\u00e4ufige Aufgabe, die Fachleute h\u00e4ufig automatisieren m\u00fcssen, ist das Herunterladen von Dateien von einer URL mithilfe eines Shell-Skripts, genauer gesagt, mit einem Bash-Skript.<\/p>\n<p>Schauen wir uns ein Bash-Skript genauer an, das nicht nur Dateien von URLs herunterl\u00e4dt, sondern auch den Inhalt der Dateien mit einer bereitgestellten MD5-Summe verifiziert und die notwendigen Verzeichnisstrukturen anlegt, falls sie noch nicht existieren.<\/p>\n<h2>Dateien von URLs herunterladen Bash-Skript<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">#!\/usr\/bin\/env bash\r\n# Description: Downloads a file from a URL to a specified path, and can verify the file content with a provided md5 sum.\r\n#\r\n# Release Notes: Initial Release\r\n#\r\n# Usage: &lt;url&gt; &lt;download file path&gt; [expected md5 sum]\r\n# &lt;&gt; are required\r\n# [] are optional\r\n# Example: https:\/\/www.nirsoft.net\/utils\/advancedrun.zip \/tmp\/advancedrun.zip\r\n#  Downloads advancedrun.zip\r\n# Example: https:\/\/www.nirsoft.net\/utils\/advancedrun.zip \/tmp\/advancedrun.zip 1f0913135878bb6cd30c1f3f6cf4b882\r\n#  Downloads advancedrun.zip, verify's the provided md5 summed hash\r\n#\r\n# Notes: If the path doesn't exist this script will create the folders needed to place it there.\r\n#  If you used \/tmp\/MyFiles\/advancedrun.zip and the MyFiles folder didn't exist then it would create it.\r\n#  The same for \/tmp\/MyFiles\/Tools\/advancedrun.zip, it would create MyFiles and Tools.\r\n# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https:\/\/www.ninjaone.com\/terms-of-use.\r\n# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. \r\n# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. \r\n# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. \r\n# Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. \r\n# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. \r\n# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. \r\n# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n\r\n# Parameters\r\nURL=$1\r\nSAVE_PATH=$2\r\nSUM=$3\r\n\r\nURL_CHECK_REGEX='(https?|ftp|file):\/\/[-[:alnum:]+&amp;@#\/%?=~_|!:,.;]*[-[:alnum:]+&amp;@#\/%=~_|]'\r\nif [[ \"${URL}\" =~ ${URL_CHECK_REGEX} ]]; then\r\n    echo \"${URL} is a valid URL.\"\r\nelse\r\n    echo \"${URL} is an invalid URL.\"\r\n    exit 1\r\nfi\r\n\r\n# Verify that the path provided is in a valid format, and create the folder structure if needed.\r\nPATH_CHECK_REGEX='^(\/[^\/ ]*)+\/?$'\r\nif [[ \"${SAVE_PATH}\" =~ ${PATH_CHECK_REGEX} ]]; then\r\n    echo \"${SAVE_PATH} is a valid path.\"\r\n    FOLDER=$(dirname \"${SAVE_PATH}\")\r\n    if [[ -d \"${FOLDER}\" ]]; then\r\n        echo \"Folder ${FOLDER} exists\"\r\n    else\r\n        echo \"Folder ${FOLDER} does not exist, creating.\"\r\n        mkdir -p -v \"${FOLDER}\"\r\n        if [ -f \"${FOLDER}\" ]; then\r\n            echo \"Created ${FOLDER}\"\r\n        else\r\n            echo \"Failed to created ${FOLDER}\"\r\n            exit 1\r\n        fi\r\n    fi\r\nelse\r\n    echo \"${SAVE_PATH} is an invalid path.\"\r\n    exit 1\r\nfi\r\n\r\nfunction private_download() {\r\n    # $1 = URL\r\n    # $2 = File Path\r\n    if [ \"$(command -v wget)\" ]; then\r\n        echo \"Downloading using wget\"\r\n        wget -O \"$2\" \"$1\"\r\n    elif [ \"$(command -v curl)\" ]; then\r\n        echo \"Downloading using curl\"\r\n        curl \"$1\" --output \"$2\"\r\n    else\r\n        echo \"Failed to find wget or curl.\"\r\n        exit 1\r\n    fi\r\n}\r\n\r\nfunction private_gethash() {\r\n    FILE=$1\r\n    HASH=$2\r\n    WAS_ERROR=0\r\n    if ! command -v md5 &amp;&gt;\/dev\/null; then\r\n        # This should never happen\r\n        echo \"md5 could not be found\"\r\n        WAS_ERROR=1\r\n    fi\r\n    if [ \"$(command -v md5)\" ]; then\r\n        CURRENT_HASH=$(md5 \"${FILE}\")\r\n        # \"##* \" in \"${CURRENT_HASH##* }\" gets the last word in a string\r\n        if [ \"${HASH}\" = \"${CURRENT_HASH##* }\" ]; then\r\n            echo \"File matches md5sum hash\"\r\n            WAS_ERROR=0\r\n        else\r\n            echo \"File does not match md5sum hash\"\r\n            echo \"Expected: ${CURRENT_HASH}\"\r\n            echo \"File: ${HASH}\"\r\n            WAS_ERROR=1\r\n        fi\r\n    fi\r\n    if [ ${WAS_ERROR} == 1 ]; then\r\n        echo \"Error verifying hash sum.\"\r\n        exit 1\r\n    fi\r\n}\r\n\r\nfunction private_validate() {\r\n    if [ -f \"$1\" ]; then\r\n        echo \"File Downloaded.\"\r\n        private_gethash \"$1\" \"$2\"\r\n    else\r\n        echo \"Failed to download file.\"\r\n        exit 1\r\n    fi\r\n}\r\n\r\n# Download file\r\nprivate_download \"${URL}\" \"${SAVE_PATH}\"\r\n# If SUM is not empty\r\nif [[ -n \"${SUM}\" ]]; then\r\n    # Verify that the file was download\r\n    # Compare hash from parameter to the file's calculated md5 sum\r\n    private_validate \"${SAVE_PATH}\" \"${SUM}\"\r\nfi\r\n<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><p>Zugriff auf \u00fcber 300 Skripte im NinjaOne Dojo<\/p>\n<p><a href=\"https:\/\/www.ninjaone.com\/de\/kostenlosetestversionformular\/\">Zugang erhalten<\/a><\/p>\n<\/div>\n<h2>Skript-\u00dcbersicht<\/h2>\n<p>Dieses Skript ben\u00f6tigt in erster Linie drei Parameter: die URL, von der die Datei heruntergeladen werden soll, den Pfad, unter dem die Datei gespeichert werden soll, und einen optionalen MD5-Hash zur \u00dcberpr\u00fcfung des Inhalts. Wenn der Pfad nicht existiert, erstellt das Skript die erforderlichen Ordner, was bei komplexen Verzeichnisstrukturen einen erheblichen Vorteil darstellt.<\/p>\n<p>Das Skript beginnt mit der Validierung der URL- und Pfadparameter. Wenn einer dieser Parameter ung\u00fcltig ist, wird das Programm sofort beendet und ein Fehler ausgegeben. Das Skript verwendet regul\u00e4re Ausdr\u00fccke, um die URL und den Pfad zu \u00fcberpr\u00fcfen.<\/p>\n<p>Sobald die Parameter \u00fcberpr\u00fcft wurden, wird die Datei heruntergeladen. Das Skript ist so konzipiert, dass es entweder \u201ewget\u201c oder \u201ecurl\u201c verwendet, je nachdem, was in der jeweiligen Umgebung verf\u00fcgbar ist.<\/p>\n<p>Nach dem erfolgreichen Herunterladen der Datei wird der Inhalt der heruntergeladenen Datei, sofern ein MD5-Hash angegeben wurde, mit dem angegebenen Hashwert verglichen. Diese Funktion ist besonders n\u00fctzlich, wenn die Integrit\u00e4t von Dateien \u00fcberpr\u00fcft wird, ein kritischer Aspekt bei vielen IT-Vorg\u00e4ngen.<\/p>\n<h2>Skript-Befehle<\/h2>\n<p>Das Skript verwendet in erster Linie die Befehle \u201ewget\u201c oder \u201ecurl\u201c zum Herunterladen von Dateien, die in Unix-basierten Systemen g\u00e4ngige Werkzeuge sind. \u201ewget\u201c und \u201ecurl\u201c sind beides kostenlose Dienstprogramme zum nicht-interaktiven Herunterladen von Dateien aus dem Internet und unterst\u00fctzen die Protokolle HTTP, HTTPS und FTP.<\/p>\n<p>Das Skript verwendet auch &#8218;md5&#8216;, ein Befehlszeilen-Dienstprogramm, das den MD5 Message Digest berechnet und \u00fcberpr\u00fcft. Der MD5-Hash-Wert (128 Bit) wird in der Regel als eine Folge von 32 hexadezimalen Ziffern dargestellt. Es wird verwendet, um die Datenintegrit\u00e4t von Dateien zu gew\u00e4hrleisten, indem ein eindeutiger Hash-Wert f\u00fcr den Inhalt einer Datei erzeugt wird. Wenn zwei Dateien denselben MD5-Hash-Wert haben, ist es sehr wahrscheinlich, dass es sich um dieselben Dateien handelt.<\/p>\n<p>Der Befehl &#8222;mkdir -p&#8220; wird verwendet, um den Verzeichnispfad zu erstellen, wenn er nicht existiert. Das Flag \u201e-p\u201c sorgt daf\u00fcr, dass kein Fehler gemeldet wird, wenn ein als Operand angegebenes Verzeichnis bereits existiert.<\/p>\n<p>Das Skript verwendet &#8222;command -v&#8220;, um die Verf\u00fcgbarkeit der Befehle &#8222;wget&#8220;, &#8222;curl&#8220; und &#8222;md5&#8220; in der Umgebung zu pr\u00fcfen. Es verwendet auch regul\u00e4re Ausdr\u00fccke und bedingte Anweisungen.[[&#8218; and &#8218;]]&#8216;, um die URL und den Pfad zu validieren.<\/p>\n<p>Als N\u00e4chstes wollen wir uns das Skript genauer ansehen und seine Anwendungsm\u00f6glichkeiten erkunden.<\/p>\n<h2>M\u00f6gliche Anwendungen<\/h2>\n<p>Dieses Bash-Skript kann in einer Vielzahl von Szenarien verwendet werden:<\/p>\n<ol>\n<li><strong>Software-Updates:<\/strong>\u00a0Das Skript kann verwendet werden, um den Download von Software-Updates von der Website eines Herstellers zu automatisieren. Nach dem Herunterladen k\u00f6nnte ein weiteres Skript verwendet werden, um diese Updates auf mehrere Systeme in einem Netzwerk anzuwenden.<\/li>\n<li><strong>Sicherheits-Patches:<\/strong>\u00a0Sicherheitspatches werden h\u00e4ufig als herunterladbare Dateien im Internet ver\u00f6ffentlicht. Dieses Skript kann <a href=\"https:\/\/www.ninjaone.com\/blog\/how-to-automate-patch-management\/\">den Download dieser Patches automatisieren<\/a> und so sicherstellen, dass alle Systeme in einem Netzwerk auf dem neuesten Stand sind und sicher bleiben.<\/li>\n<li><strong>Datendateien:<\/strong>\u00a0In datenintensiven Umgebungen ist es \u00fcblich, dass Datendateien auf Webservern gehostet werden. Dieses Skript kann verwendet werden, um solche Dateien f\u00fcr die weitere Datenanalyse oder -verarbeitung herunterzuladen.<\/li>\n<li><strong>Verteilte Systeme:<\/strong>\u00a0In einem verteilten System kann es erforderlich sein, eine bestimmte Datei \u00fcber mehrere Systeme hinweg herunterzuladen und zu \u00fcberpr\u00fcfen. Das Skript kann verwendet werden, um sicherzustellen, dass auf allen Systemen die gleiche Version einer Datei verwendet wird.<\/li>\n<li><strong>Backup und Wiederherstellung:<\/strong>\u00a0Das Skript kann zum Herunterladen von Sicherungsdateien von einem entfernten Server f\u00fcr <a href=\"https:\/\/www.ninjaone.com\/de\/blog\/was-ist-backup-und-disaster-recovery-und-warum-brauchen-sie-es\/\">Disaster-Recovery-Zwecke<\/a> verwendet werden.<\/li>\n<\/ol>\n<p>Wenn IT-Fachleute die Mechanismen des Skripts verstehen, k\u00f6nnen sie sie ver\u00e4ndern und erweitern, um es an ihre spezifischen Bed\u00fcrfnisse anzupassen und ihre Automatisierungsf\u00e4higkeiten weiter zu verbessern.<\/p>\n<h2>Vorteile f\u00fcr IT-Fachleute und MSPs<\/h2>\n<p>Dieses Skript bietet zahlreiche Vorteile f\u00fcr IT-Expert:innen und MSPs:<\/p>\n<ul>\n<li>Zeitersparnis: Anstatt Dateien manuell herunterzuladen, k\u00f6nnen Fachleute dieses Skript verwenden, um den Prozess zu automatisieren und so wertvolle Zeit zu sparen.<\/li>\n<li>Fehlerreduzierung: Durch das automatische Herunterladen und die MD5-\u00dcberpr\u00fcfung wird die Gefahr menschlicher Fehler erheblich reduziert.<\/li>\n<li>Flexibilit\u00e4t: Das Skript kann entweder \u201ewget\u201c oder \u201ecurl\u201c verwenden, wodurch es an verschiedene Umgebungen angepasst werden kann.<\/li>\n<li>Integrit\u00e4t der Datei: Durch den Vergleich von MD5-Hashes stellt das Skript die Integrit\u00e4t der heruntergeladenen Datei sicher, was bei sicherheitsrelevanten Vorg\u00e4ngen entscheidend ist.<\/li>\n<\/ul>\n<h2>Abschlie\u00dfende \u00dcberlegungen<\/h2>\n<p>Dieses Bash-Skript vereinfacht eine g\u00e4ngige Aufgabe, verbessert die Effizienz und erh\u00f6ht die Zuverl\u00e4ssigkeit und Sicherheit. Egal, ob Sie ein erfahrener Systemadministrator sind oder gerade erst in die IT-Welt einsteigen, dieses Skript ist eine wertvolle Erg\u00e4nzung zu Ihrem Toolkit.<\/p>\n<p>NinjaOnes <a href=\"https:\/\/www.ninjaone.com\/de\/rmm\/\">hoch bewertete Fern\u00fcberwachungs- und Managementplattform<\/a> kann die Bereitstellung und Ausf\u00fchrung dieses Bash-Skripts auf mehreren Systemen nahtlos erm\u00f6glichen. Egal, ob Sie Software-Updates, Sicherheits-Patches oder Dateien herunterladen m\u00f6chten, die Integration dieses Skripts in NinjaOne kann Ihnen dabei helfen <a href=\"https:\/\/www.ninjaone.com\/de\/rmm\/it-automation\/\">diese IT-Prozesse zu automatisieren und zu rationalisieren<\/a>. Es kann Konsistenz gew\u00e4hrleisten, manuelle Fehler reduzieren und Zeit sparen, indem es Massenverteilungen erm\u00f6glicht. So k\u00f6nnen die robusten Funktionen von NinjaOne in Verbindung mit diesem Skript die betriebliche Effizienz und Produktivit\u00e4t erheblich steigern.<\/p>\n","protected":false},"author":35,"featured_media":206733,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4210],"use_cases":[4307],"class_list":["post-208559","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-macos"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub\/208559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/comments?post=208559"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media\/206733"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media?parent=208559"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/operating_system?post=208559"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/use_cases?post=208559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}