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.
 


Shell-Programmieren

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.
 


Perl-Scripte

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" ;
print "Erster Test\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************************************
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);

$text = param( 'x' ) ;  #**** Daten einlesen ************
$passWord = param( 'pwd' ) ;

  #**** Brouser soll text/plain ausgeben **********
print "Content-type: text/plain\n\n" ;

print "Allg. Daten eingelesen!!\n" ;
print "Du hast $text eingetippt\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************************************
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);

$text = param( 'x' ) ;  #**** Daten einlesen ************

  #**** Brouser soll text/html ausgeben **********
print "Content-type: text/html\n\n" ;
print "<HTML><HEAD>\n" ;
print "<TITLE>PERL-Kurs</TITLE></HEAD>\n" ;
print "<BODY  BGCOLOR=#AAFFFF TEXT=#003300>\n" ;
print "<H2>Hallo</H2>\n" ;
print "<P>Ausgabe einer Mini-Seite über Perl-Script</P>\n" ;
print "Du hast<H3>".$text."</H3>eingetippt!" ;
print "</BODY></HTML>\n" ;

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.
 
 


PHP

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>
Aufruf im Cientbrouser mit http://linux/php/test1.php!

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:

 Beispiel für die Verwendung von Unterprogrammen und Dateizugriff mit PHP
 


MySQL

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!

HTML- und PHP-Scripte

Peter Kraus