![]() |
Script-Programmierung |
Linux pk-applets |
Script-Programmierung
im Unterricht
Shell-Programmieren
Perl-Scripte
PHP
MySQL
Dieser Text zeigt, wie man den Computerraum für Script-Programmierung in einem Kurs konfiguriert. Er bezieht sich auf folgende Ausstattung:
Für die Script-Sprachen selbst gibt es nur einige wenige Beispieldateien
für den ersten Test. Jedenfalls wird kein Material für einen
vollständigen
Kurs angeboten.
Voraussetzungen
Ein Windows-Editor muß die Texte im Unix-Format abspeichern können.
Der kostenlosen Editor AB-Edit
kann das!
Auf dem Linux-Server läuft Apache-Webserver und der Samba-Server
Zugang zum Linux-Server.
Mit Samba können Verzeichnisse auf dem Server zugänglich
gemacht werden.
I.A. hat jeder Client Zugang zu irgendeinem speziellen Verzeichnis,
oft einem Home-Verzeichnis eines Linux-Users.
Zugang zu anderen Verzeichnissen
Im cgi-bin Verzeichnis des Apache-Webservers liegen Scripte, die vom
Client-Brouser (Netscape oder IExplorer) aufgerufen werden können.
Wir wollen, dass Schüler auch hier Scripte schreiben und abspeichern
können.
1. In dieses Verzeichnis wechseln und ein Unterverzeichnis
kurs anlegen!
cd /usr/local/httpd/cgi-bin
md kurs
chmod kurs 0777
2. Eintrag in der smb.conf
| [kurs_cgi]
comment = kurs in cgi-bin path = /usr/local/httpd/cgi-bin/kurs read only = no writeable = Yes force create mode = 0777 force directory mode = 0777 guest ok = Yes browseable = no |
Damit gewährt man Zugang zu diesem Unterverzeichnis ,ohne
gleich alle Türen zu öffnen, den ansonsten hat wohl ein Client
keine
Schreibrechte im cgi-bin Verzeichnis.
Der Befehl /etc/init.d/smb restart
aktiviert diese Änderung.
Die Clients können nun mit diesem Verzeichnis verbunden werden.
Im Explorer - Extras - Netzlaufwerk verbinden , Verbinden mit
\\linux\kurs_cgi
( linux) ist die Bezeichnung unseres Servers im Netz.
Nun können dort Scripte abgelegt werden. Eine Ordnung mittels Unterverzeichnisse ist natürlich selbstverständlich!
Um Scripte zu testen, ist eine Telnet Verbindung nötig: Telnet
starten und mit Befehl
open <Server-IP oder Server Bezeichnung> mit
Server verbinden.
Einloggen mit Benutzername und Kennwort und wechseln in das Verzeichnis,
in das die Scripte liegen.
Unix hat eine mächtige Scriptsprache. Diese verwendet, ähnlich der Batch-Programmierung von MS-DOS oder Windows die Befehle des Betriebssystems
Voraussetzungen:
Editor mit Unixformat, der im Homeverzeichnis des Clients die Scripte
erstellt.
Beachte, dass bei diesen Dateien das "Ausführen-Bit" für
den Client gesetzt sein muß!
Telnet-Verbindung, und wechseln in dieses Verzeichnis, um dort die
Scripte zu testen
z.B.
| #!/bin/sh
#*** test1.script: Ausgabe des Datums und ein Hallo *********** #*** -e : echo interpretiert \n als "Neue Zeile" ************** echo -e "\n" date echo -e "Hallo!!\nMein erstes Shell-Script\n" |
mit Editor schreiben und (im Unix-Format) im Home-Verzeichnis
abspeichern, z.B. als test1.script
Aufruf mit Telnet
User@linux:/Homeverz/scrite> test1.script
oder User@linux:/Homeverz/scrite> bash test1.script
Die erste Zeile gibt den Interpreter an, in diesem Fall bash bzw sh!
oder 2. Beispiel:
| #!/bin/sh
#*** test2.script : Eingabe einer Zahl und ********************* #*** while-Schleife ******************************************* echo "Gib eine Zahl ein!" read i echo -e "Du hast $i eingegeben!!" while [ $i != 0 ] do i=$[i-1] echo $i done |
Die Scripte können auch über den Apache-Webserver abgearbeitet
werden.
Ist, wie oben beschrieben, ein Unterverzeichnis kurs von cgi-bin von
Samba freigegeben, so kann dort das untere Script z.B. als test3.script
abgespeichert werden.
| #!/bin/sh
echo content-type: text/plain echo date echo "Hallo!!" |
Aufruf im Webserver mit http://Linux/cgi-bin/kurs/test3.script
Wichtig ist hier die zweite Zeile, gefolgt von einer Leerzeile.
Sie teilt dem Brouser mit, dass "text/plain" kommt!
Der Brouser kann auch mit HTML gefüttert werden. Beachte die 2. Zeile!
| #!/bin/sh
echo Content-type: text/html echo echo "<HTML><HEAD>" echo "<TITLE>PERL-Kurs</TITLE></HEAD>" echo "<BODY BGCOLOR=#FFFFAA TEXT=#003300>" echo "<H2>Hallo</H2>" echo "<P>Ausgabe einer Mini-Seite</P>" echo "Heute ist<BR><H3>" date echo "</H3>" echo "</BODY></HTML>" |
Systemsteuerung mit Scripte
Die Scripte laufen unter dem User wwwrun, der natürlich
nur beschränkte Rechte hat.
Mit dem Unix-Befehl sudo können aber Root-Rechte
zugeordnet werden.
z.B.
Mit Scripte soll der Proxy-Server Squid aus- und angeschaltet werden.
In die Datei /etc/sudoers kommen die zwei Zeilen:
Cmnd_Alias INT = /etc/init.d/squid
wwwrun ALL=(root)NOPASSWD: INT
Der User wwwrun darf nun mit der Anweisung
sudo /etc/init.d/squid start bzw stop
Squid ein- und ausschalten. Die Eingabe eines Passworts ist nicht nötig.
Mit dem folgenden Script kann nun Squid geschaltet werden:
| #!/bin/sh
echo content-type: text/plain echo date sudo /etc/init.d/squid start echo "Squid läuft!!" |
Natürlich ist so ein Script auf dem Server nichts für jedermann.
Man kann absichern, indem man es in ein Unterverzeichniss mit abwegiger
Bezeichnung
von cgi-bin gibt.
Dieses Verzeichnis kann durch den Apache-Webserver mit Kennwort gesichert
werden oder
nur für eine bestimmte IP freigegeben werden.
z.B.: Eintrag in die apache-Konfigurationsdatei
<Directory /srv/www/cgi-bin/xy34t6>
Order deny,allow
Deny from all
Allow from 192.168.2.110
</Directory>
Das Unterverzeichnis xy34t6 kann nur von der IP 192.168.2.110
genutzt werden.
Der Systembetreuer testet, ob am Linux-Server Perl läuft:
Der Befehl perl -v bzw perl -V
liefert Infos.
Dazu sollte der Ort des Perl-Interpreters ermittelt werden: Meist
ist dies /usr/bin/perl
Perl gehört zur Standard-Installation des Apache-Webservers. Sonst
muß man das entsprechende Modul aus der Serie n nachladen.
Der Schüler nimmt vom Client mit Telnet Verbindung zum Linux-Rechner
auf, wechselt in das Home-Verzeichnis und erstellt dort ein Unterverzeichnis
perl, in dem die Scripte erstellt werden.
Befehl md perl
Befehl perl -v
Nun wird mit dem Editor ein erstes Perl-Testprogramm erstellt und in
obiges Verzeichnis gespeichert.
| #!/usr/bin/perl -w
print "Hallo!!\n" ;
|
Der Kommentar in der ersten Zeile zeigt wieder Linux, welcher Interpreter zuständig ist.
Das Programm wird im Telnet-Fenster mit den Befehlen perl test.pl oder auch nur test.pl gestartet. Beim 2.Befehl ist natürlich die 1. Kommentarzeile wichtig.
Der Editor kann das Perl-Script auch im PC-Format abspeichern. Der Perl-Interpreter ist da flexibel.
Folgende Programme sind also bei Perl-Programmierung am Windows-Client am Laufen:
Im Internet dienen Perl-Scripte dazu, mit dem Client Verbindung
aufzunehmen und Formular-Eingaben zu verarbeiten. Dazu muß den Kursteilnehmern
noch die Möglichkeit verschafft werden, in htDocs HTML-Dateien zu
bearbeiten.
Dort befinden sich die HTML-Dateien, die der Webserver an die Clients
sendet.
Dazu wie oben in dieses Verzeichnis wechseln und ein Unterverzeichnis
kurs anlegen!
cd /usr/local/httpd/htdocs
md kurs
chmod kurs 0777
und Eintrag in der smb.conf
| [kurs_docs]
comment = kurs in cgi-bin path = /usr/local/httpd/htdocs/kurs ... Rest wie oben beschrieben. |
In htdocs/kurs erstellt man nun eine HTML-Datei mit Formular
| <HTML>
<HEAD> <TITLE>Test Perl</TITLE> </HEAD> <BODY> <FORM action="/cgi-bin/kurs/test2.pl"> <INPUT TYPE=text NAME="x" size="40" ><BR> <INPUT TYPE=submit value="Auf geht's"><BR> </FORM> </BODY> </HTML> |
Durch Anklicken des Buttons wird das PerlScript test2.pl aktiviert und
mit Daten
versorgt.
| #!/usr/bin/perl -w
#******* PerlScript test2.pl************************************
$text = param( 'x' ) ; #**** Daten einlesen ************
#**** Brouser soll text/plain ausgeben **********
print "Allg. Daten eingelesen!!\n" ;
|
Beachte, dass die Print-Ausgabe nun von Apache an den Brouser gesandt
wird. In der ersten print-Anweisung steht nun das Format. Nach dieser
Anweisung ist
eine Leerzeile nötig, deshalb das doppelte "\n\n"!
Der Brouser gibt im obigen Beispiel texz/plain aus, im folgenden
text/html.
| #!/usr/bin/perl -w
#******* PerlScript test2.pl************************************
$text = param( 'x' ) ; #**** Daten einlesen ************ #**** Brouser soll text/html ausgeben **********
|
Die Perl-Fehlermeldungen i.A. werden auf dem Linux-Server in
/var/log/httpd/error_log abgelegt und das ist nicht allgemein zugänglich.
apache meldet bei Scriptfehlern lediglich Fehlernummer 500.
Die Zeile use CGI::Carp qw(fatalsToBrowser); im
Kopf des Perl-Scripts bringt apache dazu, die Perl-Fehlermeldungen
an den Brouser zu geben.
Das PHP-Modul ( mod_php4 ) muß aus der Serie n nachgeladen werden.
PHP-Scripte sind als aktive Teile von HTML-Seiten gedacht. Sie werden dort
zwischen den Zeichen <? und ?> eingefügt.
Wieder muß den Kursteilnehmern die Möglichkeit verschafft
werden, diesmal in htDocs HTML-Dateien *.html und PHP-Scripte *.PHP
zu bearbeiten.
Dazu wie oben in dieses Verzeichnis wechseln und ein Unterverzeichnis
php anlegen!
cd /usr/local/httpd/htdocs
md php
chmod php 0777
und Eintrag in der smb.conf
| [kurs_php]
comment = kurs in php path = /usr/local/httpd/htdocs/php ... Rest wie oben beschrieben. |
Ein erster Test könnte die Datei test1.php in diesem Verzeichnis sein:
| <HTML>
<HEAD> <TITLE>HTML-Kurs</TITLE> </HEAD> <BODY BGCOLOR="#FFAAFF" TEXT="#000033"> <H2> <? echo "Erster Test PHP" ; ?> </H2> </BODY> </HTML> |
Das Script kann auch direkt ausgeführt werden: Mit
Telnet Verbindung aufnehmen, anmelden, in das Scriptverzeichnis gehen
und Befehl php test1.php eingeben.
In diesem Fall genügt auch folgendes Script:
| <?
echo "Erster Test PHP" ; ?>. |
Das ist aber nicht im Sinn von php!
Folgende Programme sind also bei php-Programmierung am Windows-Client
am Laufen:
Die Datenbank MySQL eignet sich dazu, über PHP von den Clients
benutzt zu werden.
Schüler können hier -über PHP mit Brouser und Apache-
Daten hinzufügen oder abrufen.
Dazu sind Kenntnisse über SQL, PHP und (zur Ausgabe) HTML erforderlich!
Das folgende kleine Projekt zeigt, wie man über den Brouser Meinungen
einholt, in MySQL speichert und ausgibt.
Zusätzlich wird Name und Klasse eines Befragten gefordert und
mit der Datenbank verglichen.
Dort ist eine Liste jener Schüler, die eine Meinung abgeben dürfen.
Wir arbeiten zunächst am Linux-Server:
Aus der Serie ap sind die Pakete mysql, mysql-client und mysql-shared
zu installieren.
Nach der Installation sollte zuerst für den User root ein Passwort
eingegeben werden:
mysqladmin -u root password "geheim"
Im folgenden kann man mysqladmin bzw mysql nur noch mit der Option -p (Passwortabfrage) starten.
Erzeugen einer Datenbank:
mysqladmin -u root -p create comment
Nach Passwort-Eingabe wird nun die Datenbank comment erzeugt.
Wir testen das mit mysqlshow -u root -p
oder durch Ansicht der Verzeichnisse der Datenbanken. Diese sind
in /var/lib/mysql
Dort findet man mysql mit der Benutzer-Datenbank sowie
test
und eben comment als Unterverzeichnisse.
Die weitere Bearbeitung der Datenbank findet mit mysql statt:
Mit mysql -u root -p kommt man nach Passwort-Eingabe
zum Eingabeprompt mysql>
mysql> USE comment ;
Verwendet die (noch völlig leere Datenbank) comment.
Einrichten der Tabelle eintrag mit:
mysql> create table eintrag(
mysql> id INTEGER not null auto_increment,
mysql> datum CHAR(15),
mysql> name CHAR(30),
mysql> klasse CHAR(10),
mysql> meinung TEXT ) ;
Name Klasse und Datum sind als String gespeichert. Alle Einträge werden automatisch durchnummeriert.
Einrichten der Tabelle namen mit:
mysql> create table namen(
mysql> name CHAR(30),
mysql> klasse CHAR(10) ) ;
Wir füllen diese Tabelle mit den Daten aus einer Textdatei:
Textdatei namen.txt im Verzeichnis /tmp
| peter 9a
hans 9a gustav 9b josef 9b luis k12 christian k12 sieglinde k12 |
Verwende hier keine Leerzeichen sondern nur den Tabulator!!
Diese Textdatei wird in einem allg. zugänglichen Verzeichnis der
Linux-Maschine abgelegt, z.B. in /tmp
Wir lesen die Daten ein mit dem Befehl
mysql> load data local infile "/tmp/namen.txt" into table namen;
und prüfen mit
mysql> select * from namen ;
Ferner müssen wir noch Zugang zu unserer Datenbank gewähren:
mysql> grant all on comment.* to xyz@localhost identified by "xyz"
;
Der User xyz darf alles mit unserer Datenbank anstellen.
Wir können das ganze jetzt bereits von den Clients aus testen:
Verbindung mit Server linux über Telnet aufnehmen und einloggen.
Befehl mysql -u xyz -p
Passwort xyz eingeben und Datenbank auswählen:
mysql> USE comment ;
Ansicht der Tabellen mit
mysql> select * from namen ;
mysql> select * from eintrag ;
bzw
mysql> explain namen ;
mysql> explain eintrag ;
Mit der Telnet-Verbindung können auch die SQL-Kommandos geübt werden!
Steht die Datenbank, so können die Scripte entwickelt werden!
Peter Kraus