Lerne Coding
Eine Webseite mit Bash programmieren!
01.04.2021

Wie du eine Webseite mit Bash programmieren kannst!

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGeschätzte Lesezeit ca. Minuten
Dieser Artikel ist ein Aprilscherz vom 1. April 2021.

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.

Bash Skripte ausführbar machen

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.

Apache installieren

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

Bash als Interpreter für die Verarbeitung angeben

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

Bash Ordner erstellen & Rechte vergeben

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.

Erste Versuche in Bash

Du kannst nun eine Datei erstellen und das berühmte Hello World ausführen:

sudo nano /var/www/bash/index.sh

Systemausgaben

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.

Beispielseite in Bash

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>"

Fazit

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 🙂.

Bildquelle - Vielen Dank an die Ersteller:innen für dieses Bild
Kommentare zum Artikel

Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Eine Webseite mit Bash programmieren!"!

Kommentar schreiben

Verwante Beiträge
close