Praktisch macht das niemand, es ist auch sehr viel umständlicher als einfach PHP, NodeJS o.ä. Sprachen zu verwenden. Dennoch sind alle Informationen aus diesem Artikel real und funktionieren. Wenn du also Langeweile hast, kannst du gerne deine Webseiten in Bash schreiben. Solltest du aber sowas machen, dann bitte ausschließlich lokal um bspw. deinen Docker Container zu starten. Bedenke: Apache killt nach einer bestimmten Ausführzeit den Prozess, also erstelle lieber einen neuen Screen, anstatt alles nativ ausführen zu lassen.
Eine neue Studie aus den USA hat bewiesen, dass Bash eine sehr einfache und performante Sprache ist, und gerade durch ihre einfache Erweiterbarkeit der jeweiligen Sprachen (C++, Python, Java) deren positive Eigenschaften gleich mit nutzen kann. Daraufhin wurde im September letzten Jahres ein internationales Ministerium gegründet, welches beauftragt wurde einen Konkurrenten zu WordPress zu entwickeln, da dies ein großes wirtschaftliches Wachstum bedeutet. Ich zeige dir in diesem Artikel, worauf du dich bereits als Webentwickler in naher Zukunft freuen darfst.
Ich verwende für diese Anleitung den Apache Webserver. Möchtest du lieber Nginx verwenden, musst du die hier genannten Dinge für Nginx recherchieren.
Je nach Hoster und Linux Installation hast du eventuell einen Webserver vorinstalliert. Siehe also zunächst einmal nach. Sollte die Seite nicht geladen werden und auch keine Firewall die Anfrage blockiert, kannst du den Apache Webserver installieren. Hast du Nginx bereits installiert, musst du ihn entweder deinstallieren oder den Port 80 und 443 abändern, da sich sonst die beiden Webserver in die Quere kommen.
Unter Debian und Ubuntu installiert man Apache wie folgt:
sudo apt install apache2 -y
Es ist leider nicht möglich, die auszuführenden Skripte direkt in das Web-Verzeichnis zu legen und einfach ausführbar zu machen, denn Apache wird die Datei automatisch als Download zur Verfügung stellen. Um das zu verhindern, erstelle ich hier das Verzeichnis/var/www/bash
, welches über example.com/bash
aufrufbar sein wird. Alle Skripte, die dort liegen werden, ausgeführt. Bash-Dateien in /var/www/html
werden weiterhin als Download zur Verfügung gestellt.
Öffne als Erstes die Konfiguration mit Root-Rechten:
sudo nano /etc/apache2/sites-available/000-default.conf
Nun solltest du im XML Format zwei Virtualhosts sehen: Einen für Port 80 (HTTP) und einen für 443 (HTTPS). Im Normalfall reicht es für interne Zwecke aus, wenn die Konfiguration für Port 80 angepasst wird.
In der bestehenden Virtualhost Konfiguration für Port 80 kann nun der Code hinzugefügt werden. Mit ScriptAlias
werden alle Anfragen, welche nach example.com/bash/*
gestellt werden, nach /var/www/bash
umgeleitet, anstatt weiterhin nach /var/www/html
geroutet zu werden. Anschließend wird eine neue Regel für das Verzeichnis erstellt, und zwar, dass ein CGI Interpreter davor ausgeführt werden soll und das für die Dateitypen .sh:
ScriptAlias /bash/ /var/www/bash/
<Directory "/var/www/bash">
Options +ExecCGI
AddHandler cgi-script .sh
</Directory>
Bevor du CGI verwenden kannst, musst du das Modul noch aktivieren. Erstelle dazu eine Verlinkung in: /etc/apache2/mods-enabled
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/cgi.load
Nachdem Änderungen am Webserver vorgenommen wurden, muss dieser neu gestartet werden, damit die Änderungen übernommen werden.
sudo service apache2 reload
Bei einer gewöhnlichen Apache Installation ist der benötigte Bash Ordner noch nicht vorhanden. Er muss erst noch erstellt werden und die Rechte so gesetzt werden, dass der Benutzer www-data
die Dateien lesen kann.
sudo mkdir -p /var/www/bash
sudo chmod 755 /var/www/bash -R
Nun ist alles fertig eingerichtet, um Bash auf dem Webserver ausführen zu können.
Du kannst nun eine Datei erstellen und das berühmte Hello World
ausführen:
sudo nano /var/www/bash/index.sh
Zunächst muss der Interpreter angegeben werden. In diesem Fall /bin/bash
. Die erste Ausgabe muss der Content-Type (HTML) sein. Um für den Anfang kein komplettes HTML mitliefern zu müssen, kannst du es zum Testen auf die Zeichenkodierung und den HTML Titel reduzieren. Nun kann ganz normales HTML ausgegeben werden:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<meta charset=\"utf-8\">"
echo "<title>Website in Bash</title>"
echo "<h1>Hello World from Bash</h1>"
Du kannst die Seite unter deineServeradresse.de/bash/index.sh
ansehen.
Zum Schluss zeige ich dir eine komplette Website. Ich habe hier eine MySQL Datenbank abgefragt und den Output grafisch dargestellt:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<meta charset=\"utf-8\">"
echo "<title>Website in Bash</title>"
echo "hello world from bash $(date)"
user="root"
password=""
database="deineDatenbank"
echo "<ul>"
# sql abfrage -> artikel und in der Schleife durchlaufen lassen
mysql --user=$user --password=$password --database=$database --execute='SELECT article_name FROM `hellocoding_articles` ORDER BY `article_name` ASC' | while read ar>
# use $theme_name and $guid variables
echo "<li> $article_name </li>"
done
echo "</ul>"
Eine Webseite in Bash zu schreiben ist komplett unsinnig, da Bash für Serverautomatisierung entwickelt wurde und nicht für die Webentwicklung. Bash hat nicht nur keinerlei Frameworks oder wichtige Funktionen, es hat auch keine Objektorientierung oder Fließkommazahlen. Fließkommazahlen müssen via Python als String übergeben werden und können dort berechnet werden. Clean Code Architektur ist mit Bash auch nicht wirklich gut möglich und Vergleichsoperatoren sind nicht intuitiv. Versuch nicht daraus eine eierlegende Wollmilchsau zu machen.
Letztendlich muss ich aber sagen, dass ich bei diesem Projekt etwas über CGI gelernt habe und dich hoffentlich mit diesem Beitrag etwas unterhalten konnte 🙂.
Hinterlasse mir gerne einen Kommentar zum Artikel und wie er dir weitergeholfen hat beziehungsweise, was dir helfen würde das Thema besser zu verstehen. Oder hast du einen Fehler entdeckt, den ich korrigieren sollte? Schreibe mir auch dazu gerne ein Feedback!
Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Eine Webseite mit Bash programmieren!"!