Das Programm 'bsh' bzw. 'bsh.exe' ist ein Shell-Programm und Kommandointerpreter
genau so wie 'command.com, 4dos.com, cmd.exe'
oder unter Unix: 'sh, ksh, bash, zsh, csh, tcsh, (perl)'.
Ein Script ist eine lesbare Text-Datei, die eine mehr oder weniger umfangreiche
Kommando-Programmiersprache enthalten kann - zumindest einfache Kommandozeilen.
 'name.bat' ist beispielsweise ein Script für command.com,
und die bekannten CGI-Scripts (name.pl) werden von 'perl' interpretiert. 

name(.bsh) ist ein Script für die 'bsh'.
Die 'bsh' ist das leistungsfähigste aller Shell-Programme.
 


 

Register

Beispielhafte Scripts

Hinweise

Lizenz

Bugs

Für Fortgeschrittene

Zur Hauptseite

^

Beispiele, Scripts zum Shell-Programm bsh

Diese Seite wird unregelmäßig verbessert und erweitert!

Register

Verschiedene Datei-Umwandlungen und Filter-Funktionen 

Import/Export von eMail-Adressenlisten diverser Clients
Import/Export von eMail-Ordnern diverser Clients

Automatischer Homepage-Upload/Download-Manager

Automatischer URL-Manager nach lokalen Homepage-Umbauten
Automatischer HTML-Color-Manager
Filter:  HTML nach TXT

Erzeugung von Blocksatz-Text

Super Multistep De-/Re-Installer

bsh-CGI-Script

bsh-Manual-Kreator

Möglichst die neuesten bsh-Kompilate und Scripts verwenden!

^

Verschiedene Datei-Umwandlungen und Filter-Funktionen

NEU: Wurde etwas überarbeitet und an bsh32 angepaßt.

Menügesteuertes bsh-Script (rechte Maustaste verwenden)

Dieses Script 'conv.bsh' beherrscht zur Zeit acht Unwandlungsfunktionen
und vier Filterfunktionen:

                           Hilfe :  h
    Text (ibm)  -->  html-Datei  :  htm
    html-Zeilenkürzer:  > --> \n :  htl
    Text (ibm)  -->  Text (iso)  :  iso
    Text (iso)  -->  Text (ibm)  :  ibm
    Text (dos)  -->  Text (unix) :  dx
    Text (unix) -->  Text (dos)  :  xd
    Datei (ABC) --> Datei (abc)  :  lc
    Datei (abc) --> Datei (ABC)  :  uc
    Filter:  HREF="..."          :  url
    Filter:  HREF="mailto:..."   :  adr
    Filter:   SRC="..."          :  src
    Filter:  Strings aus Binä?r   :  str
          Ausgabedatei editieren :  ed
      Interaktive Shell (Prompt) :  sh
                         Beenden :  E


c:\> bsh conv.bsh

Es wurde relativ hoher Aufwand betrieben, um die Bedienung und das Auswählen
der Quelldateien komfortabel zu gestalten.
Stellenweise kann man fixer damit umgehen als mit einem Mausklick-Programm.

^

Import/Export von Adressenlisten diverser eMail-Programme

Menügesteuertes bsh-Script (rechte Maustaste verwenden)

Auswahl im Menü:

                                Hilfe:  h
    T-Online Vx.x  -->  Netscape-.htm:  th
    Netscape-.ldi  -->  Netscape-.htm:  lh
    Netscape-.htm  -->  Netscape-.ldi:  hl
    Netscape-.htm  -->  T-Online 2.x :  ht
    Netscape-.htm  -->  ForteAgent   :  ha
    ForteAgent     -->  Netscape-.htm:  ah
    Netscape-.htm  -->  PostMe       :  hp
    PostMe         -->  Netscape-.htm:  ph
                 Einstellungen »NNN« :  j/n..
                 Zieldatei editieren :  ed [...]
                Verzeichnis wechseln :  cd ...
             Shell aufrufen (Prompt) :  sh
                              Beenden:  E
c:\> bsh emailadr.bsh
Adressen exportieren und importieren zu können, ist für viele sehr wichtig!
Wenn diese Möglichkeit nicht besteht, bleiben nur folgende Verhaltensweisen:
  • Bei einem bestimmten Mail-Programm (für immer) bleiben.
  • Spezielle Dateien für andere Mailer stets selbst per Hand anfertigen.
  • Keine oder nur sehr wenige Adressen in's Adressbuch schreiben.
Beispielsweise hat jemand mit einem T-Online-Mailer 150 Adressen in Benutzung
und weitere 400 Einträge in Verteilern.
Was macht diese Person denn, wenn sie auf einen Netscape-Messenger umsteigen
will und womöglich später wieder zurück, oder beide Mailer nutzen muß ?!
Selbst eine einmalige Übertragung per Hand 'wirkte lange nach'!

Mit diesem bsh-Script erzeugt man in Sekunden die notwendige Datei zum
Import mit Messenger, und diverse andere Konversionen.

Dateinamen von Adressenlisten:

    T-Online Mailer V2.2x:  adressen.dat
    T-Online Mailer V1.2x:  addrbook.lst
    Netscape        V3.x :  address.htm
    Netscape        V4.x :  beliebig.ldi  (exportierte abook.nab)
Mitwirkung:

Shell-Scripts lassen sich sehr einfach verändern, daher bin ich offen für Vorschläge.
Insbesondere kann man mir Adressenbücher senden, von Mail-Programmen, die hier
noch nicht aufgelistet sind!
Solche Dateien sollten aber vollständig sein, das heißt, der Adreßbuch-Mechanismus
des Mailers sollte mindestens bei einer Adresse voll ausgenutzt worden sein.
Ideal ist eine Eintragung, bei der die Titel aller Eingabefelder im Feld wiederholt wurden.
(Firmenanschrift==firmenanschrift)
Eine Mitteilung des Standard-Pfadnamens ist nützlich.  (c:\t_online\email20\xyz\adressen.dat)
Und falls der Mailer ein binäres Adressbuch benutzt, muß ein Export zu einer Textversion
vorgenommen werden.  (z.B.:  abook.nab --> xyz.ldi)

^

Import/Export von eMail-Ordnern diverser Programme

bsh-Script (rechte Maustaste verwenden)

Achtung:
Dieses Script liegt quasi erst als Version 0.8 vor.
Es wurde bisher nur einmal -allerdings erfolgreich- getestet und ist nicht menü-gesteuert.
Also, sicher nicht für jeden Anwender geeignet!

Aufrufe:

c:\> bsh emailbox.bsh
c:\> bsh emailbox.bsh hilfe
c:\> bsh emailbox.bsh Quell-  Ziel-Verzeichnis
Dieses Script kopiert Ordner-Inhalte an das Datei-Ende von passenden Ziel-Ordnern.
Es werden alle Ordner-Dateien verarbeitet, die konzeptionell beliebig viele eMails
enthalten können, wobei jeweils die erste Kopfzeile  »From - ...«  lauten muß.
Fehlende Ordner-Namen können im Script-Text ergänzt werden, ebenso weitere
Probier-Verzeichnis-Verlängerungen.
Natürlich kann man auch (beliebige) Ordner-Verzeichnisse unverkürzt angeben.

Das Script verwendet  Message-Id:  , um doppelte Mails zu verhindern.
Fehlende M-ID werden automatisch erzeugt und eingefügt.
Ein Rückkopieren in ehemalige, nichtleere Quell-Ordner mit fehlenden ID führte aber
zu Verdoppelungen!
In den Verzeichnissen sollten alle Ordner vorhanden sein, und wenn sie leer sind;
leere Dateien mit der bsh erzeugen:   :>datei

Ich habe mit dem Script beispielsweise T-Online-Ordner einem Unix-Nav3 (/nsmail/*)
hinzugefügt, wobei etwa 80 Mails mit etwa 400 KB in etwa 10 Sekunden kopiert
und 20 fehlende M-ID addiert wurden.
Ich finde, das ist für eine Script-Lösung sehr schnell, zumal jede Zeile einzeln gelesen
und mehrfach untersucht wird.

Diese Script-Funktion ist für mich äußerst wichtig, denn ohne sie wäre ich an immer
den gleichen Mailer gefesselt!
Manuelle Übernahmen sind nur teilweise möglich, reichlich unvollkommen und sehr
unbequem!
Außerdem kann man beispielsweise fehlende Möglichkeiten eines Mailers durch einen
anderen Mailer ausgleichen, indem man hinkopiert, arbeitet, wieder rückkopiert!

Die Dateien des alten TO-Mailers (Decoder v1.2) müssen vor Verwendung verändert
werden.  Ich glaube, da gibt es für jede einzelne Mail eine extra Datei, und eine erste
Kopfzeile 'From - ...' fehlt, die man über 'date: ...' ergänzen muß.
Dateien zusammenfassen:

#  cd \decoder\email
#  cd u*
#  cat [0-9]* > eingang.dat

^

Automatischer Homepage-Upload/Download-Manager
(u.a. für T-Online-Homepages  ftp://home-up.t-online.de)

Siehe unten: Anmerkung.

Menügesteuertes bsh-Script (rechte Maustaste verwenden - binär laden!)

Aufruf:  bsh hpm.bsh

Auswahl im Menü:

    Datum+Uhrzeit : 06.Nov.1999, 21:37.03
    host + login 1: home-up.t-online.de;user anonymous .
    ftp-Kommando 1: ftp -n  < /tmp/bsh_tmpf.500
    Kommando     1: /bin/csh -f -c "/etc/mstppp start"
    Kommando     2: /bin/sh /etc/mstppp stop
    Kommando     3: Dir=c:\winnt\system32\wsock32; MOVE $Dir.dll ${Dir}_
    Local  Info   : 99= 5576 KB  < 4= 24 KB, -:24 KB
    Remote Info   : 109= 6672 KB  > 5= 909 KB, +:0 KB
    DL-Verzeichnis: /u/hp/DL
    HP-Verzeichnis: /u/hp/1
    
    Auswahl Zeitzone    -1 : z [-]stunden
    Auswahl ftp ¦ host     : f{1-9} ¦ h{1-9}
    Auswahl Verzeichnisse  : v¦vh¦vd  [Pfad]
    Kommando ausführen     : 1¦2¦...¦9
    Info-Daten remote:local: I[+]  [R] [t¦T] [d][l][u¦u1¦xu1]
    Upload                 : U
    Download¦Löschen       : D¦L¦DL|LV
    Editor: script¦info    : ed [s¦i]
    Hilfe                  : h
    Beenden                : E
    
                           : _
Wie das Script funktioniert und was es bietet, sieht man bereits am Menü allein.
Im Script selbst (hpm.bsh) ist ein Hilfetext lesbar, mit Browser, Editor oder im laufenden
Script per Option 'h' oder 'ed'.

Standardmäßig benötigt man nur  'I' und 'U' , um sein Verzeichnis auf dem Server aktuell zu halten.
Die Optionen hinter 'I' sind für automatische Zeitstempeländerungen und um remote-Dateien
oder -Verzeichnisse umzubenennen, so wie der URL-Manager das lokal kann.

Option  'I  R'  paßt die remote Seite mittels rename-ftp-Kommandos so weit wie möglich
an die lokale Seite an.
Rename-Kommandos ersparen jegliches Transfer-Volumen!

Das Script ist für alle Betriebssyteme geeignet, für die es eine bsh-Variante gibt.

Liste der Merkmale:

    o  Für DOS, alle Windowse, mehrere Unixe.
    o  Nützliches Zusammenwirken mit URL-Manager.
    o  Vollautomatisch - Schnelle Standardbedienung.
    o  Beliebig viele lokale und remote Seiten.
    o  Beliebige Unterverzeichnisse (rekursiv).
    o  Verstecken von lokalen und remote Dateien.
    o  Original Online-Abgleich mit der remote Seite.
    o  Sekundengenau per MDTM-ftp-Kommando. (Option I+)
    o  Uhrzeit-Korrektur +/-Stunden.
    o  Bis 9 Begleitkommandos ('1'-'9') einstellbar.
    o  Lokal- und Remote-Info.
    o  Upload, Download, Löschen, mit Unterverzeichnissen.
    o  Autom. Anlegen von Verzeichnissen bei Upl/Dwnl.
    o  Umbau der remote Seite wahlweise auch mit rename
       ohne Transfer.
    o  Rückwärtsabgleich der lokalen Zeitstempel (rem-->loc).
       (Z.B. Laptop unterwegs (multilokal))
    o  Vielfältige autom. Umbenennung der remote Dateien
       und Verzeichnisse.
    o  Upload-Abgleich UND Aktualisierungs-Download (8Std.)
Alle Einstellungen sind frei definierbar und werden am Ende des Scripts dauerhaft gespeichert!
Die oben zu sehenden Einstellungen sind nur beispielhaft, ebenso die Einträge am Script-Ende.

Das Script benutzt das ftp-Kommando  dir "-lAR ." , um ein rekursives, unix-typisches
ls -lAR  Listing zu erhalten.
Man kann das im Script ändern, falls das mal notwendig sein sollte, beispielsweise:
 ls -lAR  ,  dir -R  ,  nlist "-lAR ."   ...
Die meisten(alle?) ftp-Programe kennen allerdings das 'dir'-Kommando, das daher auch gewählt wurde.
Das Script arbeitet nur mit dieser Art von Dateiliste!
Ich habe bisher keinen ftp-host kennengelernt, der ein anderes Listing hat.

Anmerkung:
Die Dateiliste vom Server ist nur minutengenau, und bei einem halben Jahr alten Zeiten nur tagesgenau.
In Verbindung damit wurde jetzt auch ein Fehler beseitigt, der wie ein Y2K-Fehler aussah, aber
kein solcher war.

Dieser 'Fehler' ist allerdings nicht 100-prozentig beseitigt.
Nach größeren Zeitabständen können mitunter einige wenige Dateien unnötig zum Upload
angeboten werden.
Lädt man sie hoch, werden sie anschließend zum Download angeboten.
Da hilft dann Option  I T , nach dem Upload.

Das liegt am Listenformat:

    Apr 24 16:38     (Bis etwa 1/2 Jahr Dateialter)
    Apr 24  1999     (Ab  etwa 1/2 Jahr Dateialter)
Tja - Es gibt da prinzipiell eine Lösung:   ftp> quote MDTM dateiname
Dies Kommando liefert die sekundengenaue GMT-Zeit:   20000424143846
Aber es dauert pro Datei eine Sekunde oder länger, weshalb es bisher nicht implementiert wurde.
Wer will schon 3 Minuten oder länger auf das Resultat der Option 'I'  warten?!
Es ist außerdem unsicher, ob jeder ftp-Server das MDTM-Kommando kennt!

Option  'I+'  ist neu!
MDTM-Kommandos  werden zum Server geschickt -- mit dem T-Online-HP-Server klappt es jedenfalls.
Es geht schneller als erwartet:  etwa 20 Sekunden pro 100 Dateien.
Wenn es mit bestimmten ftp's nicht klappt:  Option  ftp -v  probieren.

#@lign  #@rign:
Es können jetzt Unix-Wildcards verwandt werden, beim Verstecken/Ignorieren von Dateien:
#@lign [A-Z]*
#@rign tmp/*

.

^

Automatischer URL-Manager nach lokalen Homepage-Umbauten

Beta.

Menügesteuertes bsh-Script  (rechte Maustaste verwenden - binär laden!)

Aufruf:   [pfad\]bsh32.exe [pfad\]urls.bsh

Auswahl im Menü:

    Aktuelles Verz. "/u/sh/bsh" : cd [verz]
    Datum+Uhrzeit : 19.Nov.1999, 22:18.32
    Verzeichnisse : /u/hp/2,/u/hp/3,/u/sh/ht
    Erweiterungen : htm html
    
    Verzeichnisse hinzu    : v  [verz[,verz]...]
    Erweiterungen hinzu    : e  [erw[ erw]...]
    Rename Upp/Low-Case    : R  [!][a][d] [l][u¦u1¦xu1] [t[[-]min]]
    Datenliste erzeugen    : 1
    Urls herstellen        : 2  [=][a][d] [l][u¦u1¦xu1]
    Urls schreiben         : 3  [!]
    Undo  3 !              : U
    Editor: script¦info    : ed  [s¦i]
    Hilfe                  : h
    Beenden                : E
    
                           : _
Dieser URL-Korrektor ändert automatisch alle URLs in sämtlichen Dateien in den angegebenen Verzeichnissen,
so daß sie korrekt passen.
Das Besondere ist, daß man eine Homepage-Liegenschaft nicht unter Kontrolle dieses Script-Programms
umbauen muß, sondern dies mit beliebigen Werkzeugen vorher tun kann!
Der URL-Manager kann zu beliebigen Zeiten gestartet werden - und korrigiert alles.

Im Normalfall braucht man nur die Optionen  1 2 3 !  nacheinander eingeben - und das war's!

Desweiteren können alle Dateien oder Verzeichnisse in den angegebenen Verzeichnissen umbenannt werden,
und zwar in Kleinbuchstaben, Großbuchstaben, erster Großbuchstabe, und erster vorkommender Großbuchstabe,
jedoch nicht in einer Erweiterung.
Die t-Option setzt die Zeitstempel auf die aktuelle Zeit, optional mit +/-minuten.

Die gleichen Umbenennungen können bei den URLs vorgenommen werden.
Dabei können auch bereits passende URLs einbezogen werden.
Weiterhin können URLs nur textmäßig geändert werden, ohne Korrektur der Verknüpfung.

Bei jedem Arbeitsgang wird eine Info-Datei angelegt, die manchmal auch als Datenbasis für den nächsten
Arbeitsgang dient.
Man kann tatsächliche Dateiänderungen unterdrücken, um zuvor die Informationen anzuschauen.
Vor  '3 !'  müssen aber immer (erneut)  '1'  und  '2'  ausgeführt werden!

Solche URLs:   http://...   und ähnlich werden logischerweise nicht geändert.

Info-Datei nach Option '1':

    817: P*/u/hp/1/bshbeisp.htm*P U*istep.bsh*U
    820: P*/u/hp/1/bshbeisp.htm*P U*istepbsh.htm*U
    821: P*/u/hp/1/bshbeisp.htm*P U*istep.txt*U
    1056: P*/u/hp/1/bshbeisp.htm*P U*lizenz.htm*U
    1139: P*/u/hp/1/bshbeisp.htm*P U*homepage.htm#hpdwnld*U
    122: P*/u/hp/1/c.htm*P U*homepage.htm#hpdwnld*U
    22: P*/u/hp/1/cksum.htm*P U*cksum.exe*U
    25: P*/u/hp/1/cksum.htm*P U*cksum.txt*U
    85: P*/u/hp/1/cksum.htm*P U*homepage.htm#dwnld*U
    21: P*/u/hp/1/cmd.htm*P U*cmp.exe*U

Info-Datei nach Option '2':

    Keine Datei zu: "cybercom.bin" in: /u/hp/1/homepage.htm[192]
    Keine Datei zu: "../albert.rommel/ppp.htm" in: /u/hp/1/homepage.htm[271]
    FOR: /u/hp/1/homepage.htm
    OLD: "homepage.htm"
    NEW: "../1/homepage.htm"
    IN : /u/hp/2/190.htm[115]
    
    Keine Datei zu: "../schellong" in: /u/hp/2/index.htm[13]
    Keine Datei zu: "../schellong" in: /u/hp/3/index.htm[13]
    FOR: /u/hp/2/bsh241.zip
    OLD: "bsh241.zip"
    NEW: "../2/bsh241.zip"
    IN : /u/hp/3/index.htm[14]
    
    FOR: /u/hp/1/bsh242.zip
    OLD: "bsh242.zip"
    NEW: "../1/bsh242.zip"
    IN : /u/hp/3/index.htm[14]
    
    FOR: /u/hp/1/bsh243.zip
    OLD: "../bsh243.zip"
    NEW: "../1/bsh243.zip"
    IN : /u/hp/3/index.htm[15]

Info-Datei nach Option '3':

    115: /u/hp/2/190.htm
    <CENTER><P><TT><FONT SIZE=+1><A HREF="homepage.htm">Zurück
    <CENTER><P><TT><FONT SIZE=+1><A HREF="../1/homepage.htm">Zurück
    14: /u/hp/3/index.htm
    <P><A HREF="bsh241.zip"></A></P> <P><A HREF="bsh242.zip"></A></P>
    <P><A HREF="../2/bsh241.zip"></A></P> <P><A HREF="../1/bsh242.zip"></A></P>
    15: /u/hp/3/index.htm
    <P><A HREF="../bsh243.zip">http://home.t-online.de/home/schellong</A></P>
    <P><A HREF="../1/bsh243.zip">http://home.t-online.de/home/schellong</A></P>

Informationen für Fortgeschrittene:

Der URL-Manager sucht innerhalb von Zeilen nach <TAGS ...> und innerhalb dieser TAGs nach "URLs",
denen einer der folgenden Url-Typ-Namen vorangestellt ist, mit einem '=' dazwischen.
Vor und nach dem '=' dürfen Leerzeichen oder Tabs stehen.
    <XYZ ... ABC =  "url" ... DEF="url" ... > ... < ... > [\r]\n
    
    HREF="url"
    SRC="url"
    BACKGROUND="url"
    PROFILE="url"
    CITE="url"
    DATA="url"
    CODE="url"
    CODEBASE="url"
    PLUGINURL="url"
    PLUGINSPAGE="url"
    DYNSRC="url"
    ARCHIVE="url"
    URL="url"
Folgende URL-Teile werden abgetrennt, nicht bearbeitet, und später wieder angefügt:
    "pfad#ankername"
    "pfad?abc=n1|def=n2&k=j4|m=36"
TAGs, die innerhalb einer Zeile nicht vollständig sind, werden also nicht untersucht.
Solche TAGs habe ich allerdings noch nicht gesehen; HTML-Editoren machen eher das Gegenteil.
    ../aaaa/bbb/.././../ccccc/ddd/./..
Solche URLs werden in eine Normalform umgewandelt.

Der URL-Manager ist also durchaus ziemlich professionell.
Es handelt sich nicht um ein primitives Werkzeug.

^

Automatischer HTML-Color-Manager

Menügesteuertes bsh-Script (rechte Maustaste verwenden - binär laden!)

Farbpalette mit 550 Farben

Auswahl im Menü:

    Aktuelles Verzeichnis '/tuvw/xyz' : cd verz
    Farbnamen-Notizen  : "  16:Mokkasin  "
    Farbenliste/Notizen               : f [-]
    Dateienauswahl               84   : d
    Gruppenauswahl       -1--4-----   : gw [0123456789]
    Gruppen-Farbensatz kopieren < ¦ > : g n ¦ G n...
    Farbziel auf Farbe setzen         : {1-10}={fnam¦fnum} [n=f]...
    DokumentBG  Holz3                 1
    TabellenBG  Elfenbein1            2
    TabRowBG    Null                  3
    TabColBG    HellStahlBlau3        4
    TabHColBG   Weiß                  5
    Link        StahlBlau3            6
    BesuLink    StahlBlau4            7
    AktiLink    Gold                  8
    Textfarbe   Schwarz               9
    Fontfarbe   Null                 10
    Link-/Text-/Font-Farben schreiben : L¦T¦F
    Alle Farbziele schreiben          : S
    Hilfe                             : h
    Beenden                           : E
    
                                      : _
Am Menü kann schon erkannt werden, wie das Script wohl arbeitet.
Ich habe das benutzt, um meine vielen .htm schnell vereinheitlichen zu können.

Das Script ändert nur bereits vorhandene Werte: BGCOLOR="#XXXXXX"  ,  COLOR="#...

    Dokument-Hintergrund(BG)
            TabellenBG
                    TabellenZeilenBG
                            TabellenSpaltenBG
                            TabellenKopfspaltenBG
    LinkFarbe
    BesuchterLinkFarbe
    AktiverLinkFarbe
    TextFarbe
            FontFarbe
Obenstehend wird die Hierarchie der Farben gezeigt.
Wenn in einer Tabelle gar keine Farbe gesetzt ist, haben alle Tabellenteile die Dokumentenfarbe.
Wenn in einer Tabelle nur die Tabellenfarbe gesetzt ist, haben alle Tabellenteile diese Tabellenfarbe.
Sobald eine Tabellenspaltenfarbe gesetzt ist, hat diese Spalte stets diese gesetzte Farbe.
Die Priorität der Farbanzeige steigt also von links nach rechts.

Auf diese Weise können die verschiedenen Farben im Dokument recht vielfältig gesetzt werden.
Man muß nur auf ein einheitliches Konzept hinsichtlich gesetzt/ungesetzt achten.

Farbe 'Null' verhindert ein Schreiben.

Es können bei Farbnamen Wildcards verwendet werden.
Auch Groß-/Kleinschreibung wird bei Farbnamen nicht unterschieden.

Die Dateiliste (: d) wird rekursiv erstellt.

Auch mit CSS (Cascaded Style Sheets) kann man dieses Script nicht ersetzen.
Denn hier wird mit 550 (und zusätzlich eigenen) Farbnamen operiert,
wobei je 10 Farben (html-Farbziele 1-10) 10 Farbgruppen (0-9) zugeordnet werden können
und beliebig html-Dateien diesen 10 Gruppen zugeordnet werden können.
Und die angezeigte Farbgruppe und die Farbgruppen können untereinander beliebig kopiert werden...

Bei der Arbeit mit diesem Script ist es nützlich, ein Console-Fenster und einen Browser gleichzeitig
geöffnet zu halten.
So kann man eine Farbgruppe wählen, S drücken, und gleich danach im Browser Reload machen ...

Das Script erwartet, daß die HTML-Tags und deren Parameter jeweils in ein und derselben Zeile stehen:

    <BODY BGCOLOR="#ADADAD" VLINK="#00FF00" ...
Andernfalls werden die Farben nicht geändert.
Groß-/Kleinschreibung ist egal.

Nachfolgend eine Beispiel-Sitzung mit dem Script:

    Script-Name...
    Script ist: '/u/hp/1/colors.bsh'
    Inhalts-Test...
    Inhalts-Test G...
    GruppenGWposition=43431
    Gruppenposition=43442
    Dateienposition=47277
    Standardfarben setzen...
    Dateienabgleich...
    
    ----------- bsh-Script 'HTML-Farben' -----------
    -------- Copyright (c) Helmut Schellong --------
    
    
                                         : d
       -1--------    1:bshbeisp.htm
       --2-------    2:bshmnk.htm
       --2-------    3:cksum.htm
       -1--4-----    4:sco.htm
       --2-------    5:cmd.htm
       --2-------    6:compilo.htm
       --2-------    7:delsafe.htm
       --2-------    8:forum.htm
       -1--------    9:homepage.htm
       --2-------   10:hpinfo.htm
       --2-------   11:lim.htm
       --2-------   12:mailcode.htm
       --2-------   13:olinfo.htm
       --2-------   14:pearl.htm
       -1--------   15:190.htm
       --2-------   16:istepbsh.htm
       -1--------   17:syntax.htm
       -1--------   18:cc.htm
       -1--------   19:c.htm
       --2-------   20:fan.htm
    Auswahl:a[-b]=0123456789- ...
    Weiter:<Enter>
       -1--------   21:win.htm
       --2-------   22:overclk.htm
       --2-------   23:lizenz.htm
       ---3------   24:atxcool.htm
       --2-------   25:gew.htm
       -1--------   26:hinw.htm
       -1--------   27:kurz.htm
       --2-------   28:ansi.htm
       ----------   29:hits.htm
       ----------   30:rgb.htm
    Auswahl:a[-b]=0123456789- ...
    Start:<Enter>  Beenden:e (EOF) e
    
                                         : f
    
       0:Null                   1   1   1
       1:Schwarz                0   0   0
       2:Weiß                 255 255 255
       3:Schnee               255 250 250
       4:GeistWeiß            248 248 255
       5:WeißerRauch          245 245 245
       6:Gainsboro            220 220 220
       7:BlumenWeiß           255 250 240
       8:AltSpitze            253 245 230
       9:TuchWeiß             250 240 230
      10:AntikWeiß            250 235 215
      11:PapayaSahne          255 239 213
      12:MandelBleich         255 235 205
      13:Keks                 255 228 196
      14:Pfirsich             255 218 185
      15:NavajoWeiß           255 222 173
      16:Mokkasin             255 228 181
      17:Korn                 255 248 220
      18:Elfenbein            255 255 240
      19:ZitroneSeide         255 250 205
      20:Meermuschel          255 245 238
    Start:s  Beenden:e  Farbwahl:123 [456]...
    Farbname:[*]xyz[*]  Weiter:<Enter>
      21:Honigtau             240 255 240
      22:PfefferminzKreme     245 255 250
      23:Azur                 240 255 255
      24:AliceBlau            240 248 255
      25:Lavendel             230 230 250
      ...
      78:DunkelKhaki          189 183 107
      79:Khaki                240 230 140
      80:BlaßKanonengold      238 232 170
    Start:s  Beenden:e  Farbwahl:123 [456]...
    Farbname:[*]xyz[*]  Weiter:<Enter>  e
    
    
       Farbnamen-Notizen  : "  "
       Farbenliste/Notizen               : f [-]
       Dateienauswahl                1   : d
       Gruppenauswahl       ----4-----   : gw [0123456789]
    
       Alle Farbziele schreiben          : S
    
                                         : S
    Gruppe 4...
    1 Dateien
    Farbgruppe setzen...
    ... +CDAA7D+FFFFF0+010101+A2B5CD+FFFFFF+4F94CD+36648B+FFD700
        +000000+010101
    G=4: HTML schreiben...
    sco.htm ... 23 Schreibvorgänge
                                         : E

Das Script liest aus sich selbst und schreibt in sich selbst hinein:

    #@F 2g3o3f3f111i111i111i
    #@F 2l363b3q343l3t1111111h1111111h1111111h
    ...
    #@F 3m363i23363n3c3p38283i3l383a3l3i3o3h3711111l1k11111l1m11111l1q
    #@F 3m363i23363n3c3p382m3i3j2l3b34373i3q111j1m1l111j1j1j111j1m1m
    #@F 3m363i233f3n2434363e3a3l3i3o3h37111i1o1j111i1p1n111j1h1l
    #@F 3m363i2a3c3a3b3f3c3a3b3n1111111h1111111h111j1m1m
    #@f EigeneFarbe 2 2 2
    
    #@g -1--------
    #@G Null,,,,,,,,,,,,,,,,
    ...
    #@G Schwarz,,,,,,,,,,,,,
    #@G Null,,,,,,,,,,,,,,,,
    
    #@H ..............
    
    #@D1 dummy.html
    #@D2 dummy.html
    #@D3 dummy.html
Man darf nur eigene Farben hinzufügen (#@f ) und bei speziellem Bedarf die Dateiliste (#@Dg )
am Dateiende ändern.
Im Bereich  #@G  und  #@g  darf kein einziges Zeichen geändert werden, auch nicht der Zeilenvorschub!

Es empfiehlt sich, falls man in mehreren verschiedenen Verzeichnissen arbeiten will,
für jedes dieser html-Verzeichnisse eine separate Script-Kopie zu verwenden!

Man bedenke, daß das Script ja die ausgewählten Dateinamen in sich gespeichert hat,
und in einem anderen Verzeichnis gibt es die gespeicherten Dateien nicht, oder mit anderem Inhalt!
Das Script bemerkt das und fragt in solch einem Fall, ob die betreffenden Dateieinträge gelöscht
werden sollen.

Tip:  Eine Script-Kopie im selben Verzeichnis erweitert natürlich die Gruppen von 10 auf 20 ...!
(Der Nameteil 'colors' kann natürlich beliebig gewählt werden.)

Aufrufe:  bsh .\colors ; bsh32 colors.bsh

Möglichst nicht  # . colors.bsh  innerhalb einer interaktiven bsh aufrufen.
Das kann (besonders bei großen Scripts) zu (Namen-)Konflikten führen.
Besser:  # bsh colors.bsh oder: # colors.bsh falls das Script im PATH liegt.
Generell ist # colors möglich, aber es kann colors.exe geben ...!

^

Filter:  HTML nach TXT

bsh-Script  (rechte Maustaste verwenden - binär laden!)

Dieses einfache Script ohne Menü filtert alle HTML-Tags mit ihren Parametern aus
und läßt alles andere stehen.
Der verbliebene Text wird in keiner Weise formatiert, beispielsweise nicht zentriert.

Aufrufe:

    bsh h2t.bsh [-4] xyz.htm
    bsh h2t.bsh [-4] xyz.htm > xyz.txt
Option -4 schaltet Codepage 437 ein, Standard ist ISO8859-1.

 

^

Einfache Erzeugung von Blocksatz-Texten

bsh-Script  (rechte Maustaste verwenden - binär laden!)

Dieses einfache Script ohne Menü erzeugt Textblöcke mit fester Breite von 44.
(Die Breite kann man im Script ändern, mit einem Editor.)

Es werden keine Worte getrennt, insofern ist dies ein relativ einfacher Algorithmus.
Der Vorteil der Einfachheit ist, daß jede beliebige Textdatei gewandelt werden kann,
ohne jegliche vorherigen Berücksichtigungen.

Aufruf:

    bsh bsatz.bsh xyz.txt [> bxyz.txt]
Ergebnis-Beispiel:
      Abhängigkeit werden a oder b auf 66 gesetzt!
      Klammern beim ternären  Operator  versperren
      jedoch solche Referenzen! Diese Konstruktion
      kann auch mitten in einer  Mehrfachzuweisung
      stehen,    und    Verschachtelungen     (mit
      Klammern!) sind auch möglich.
      
      Eingabe/Ausgabe  Vor  der  Ausführung  eines
      Kommandos kann seine Ein-  und  Ausgabe  mit
      einem     oder      mehreren      speziellen
      Umlenkungs-Argumenten   umgelenkt    werden.
      Diese Argumente werden nicht an das Kommando
      übergeben.  Nach  Interpretation  durch  die
      Shell darf aus ``Wort''  nur  ein  einzelnes
      Argument geworden sein.  Umlenkungsargumente
      können  auch  als  eigenständiges   Kommando
      abgesetzt werden,  wirken  dann  global  und
      können   schrittweise   oder   auf    einmal
      zurückgenommen werden (-Z-). Vor  die  unten
      angegebenen Zeichen < >  können  Digits  als
      explizite Angabe des Datei-Handles  gestellt
      werden. Implizit werden die Handles 0<  oder
      1>   angenommen.   Desweiteren   kann    ein
      Buchstabe 'b' oder 't' vorangestellt  werden
      (-Z-), womit TEXT- oder BINÄR-Modus für  die
 

^

Multistufen De-/Re-Installierer -- Registriert bis zu 999 Install-Stufen

Menügesteuertes bsh-Script (rechte Maustaste verwenden - binär laden!)

Script als .htm-Datei
Allgemeine Text-Information dazu (IBM437)

Auswahl im Menü:

                Hilfe:
    Vor  Installation:
    Nach Installation:
    Zustand Rückwärts:
    Zustand  Vorwärts:
    Rückwärts Löschen:
    Dateien     lesen:
    Dateien editieren:
              Beenden:
c:\> bsh istep.bsh
Wenn man Foren und Newsgroups anschaut, sieht man außerordentlich häufig Beiträge,
die große Probleme wegen defekter und/oder nicht entfernbarer Installationen schildern!
Das scheint ein ganz großes allgemeines Software-Problem zu sein!

Das hier angebotene Shell-Script für die 'bsh' löst dieses Problem auf sehr elementare
und (deshalb) sichere und vollständige Weise.
Es werden bei jeder Stufe mehrere Informationslisten erzeugt, die allein schon sehr helfen
können, Probleme zu lösen.
'istep.bsh' gehört zu den "besseren" Scripts, mit viel Sicherheitsfunktionen. 


Eine Installationsstufe wird registriert, indem die Menü-Punkte
Vor - und Nach Installation ausgeführt werden.

Das Script erstellt eine Liste von absolut allen Dateien, mit Pfadnamen, Zeitstempel und Größe.
Nach einer Installation oder sonstigen beliebigen Veränderung wird erneut eine solche Liste
erzeugt.  Diese beiden Listen werden verglichen und alle Änderungen festgehalten.

Änderungen können sein:
Neue Dateien, die also vorher noch nicht da waren.
Geänderte Dateien, die jetzt eine andere Größe oder Zeit (oder Prüfsumme) haben.
Gelöschte Dateien, die also jetzt nicht mehr vorhanden sind.

Aufgrund dieser Änderungsdaten kann das Script alle notwendigen Aktionen durchführen,
wenn man in der Kette der registrierten Stufen abwärts oder aufwärts gehen will.

Sehr wichtig ist, daß bei der ersten Hälfte einer Stufe (Vor Inst.) Dateien pauschal gerettet
werden, die in Verdacht stehen, von einer Installation verändert oder gelöscht zu werden.
Diese Dateien (z.B. ...\*.dll) müssen in der ini-Datei -gut vorausgeschätzt- aufgelistet werden.
Dieser 'Schwachpunkt' ist leider absolut nicht zu vermeiden!
Unnötig gerettete Dateien werden bei der zweiten Stufen-Hälfte wieder gelöscht.
Dabei werden auch diejenigen Dateien aufgelistet, die hätten gerettet werden müssen,
jedoch in der Rettungsliste fehlen und folglich nicht gerettet werden konnten!

Beim Rückwärtsgehen werden die Installationsdateien von ihrem Original-Standort entfernt
und in das istep-Verzeichnis hinein abgesichert, also in einem Ladezustand behalten.
Die Rettungsdateien hingegen werden zum Original-Standort zurückkopiert.

Beim Vorwärtsgehen werden die abgesicherten Installationsdateien zurückbewegt.

Rückwärtslöschen entspricht Rückwärtsgehen, jedoch entfernt danach Stufen von oben her.

Dieses Script ist ein Ableger eines wesentlich besser ausgestatteten, welches allerdings nur
mit der Vollversion der 'bsh' läuft.
Ein kleiner Teil der Zusatzausstattung ist an der ini-Datei dieses Scripts erkennbar.

^

Durchschleifung von Download-Dateien mit WebCounter-Zählung

Download-Dateien sind meist keine HTML-Dateien, die ein Counter-Image zeigen können.
Wenn man sie durch ein Script hindurchleitet, ist eine Beliebtheitszählung dennoch möglich:

Aufruf:   "de/cgi/get.cgi?0.141:../bin/bsh32.exe"

    #!./bsh_lxs_cgi
    #!/u/bin/bsh
    
    
    set -f
    
    arg="$QUERY_STRING"
    ok=0
    expr "$arg" :zn '^%([0-9]%{1,2%}%.[0-9]%{1,3%}%):.' && {
       expr "$arg" :nam ':%(..*%)$' || nam=
       expr "$nam" =:nam '%%2f' += '/'
       expr "$nam" :dir '^%(.*/%)[^/]*$' || dir=
       expr "$nam" :nam '%([^/]*%)$' || nam=
       expr "$nam" :erw '%.%([^/.]%{1,%}%)$' || erw=
       #################
       #################### geheime Namenergänzung $pre
       ###############      der wirklichen Datei
       ##############
       [ -s "$dir$pre$nam" ] && ok=1
    }
    
    [ ok -eq 0 ] && {
       echo "Content-type: text/plain%n"
       exit 0
    }
    
    HTTP_REFERER="$HTTP_REFERER::$dir$nam"
    export HTTP_REFERER
    
    extern icnt.cgi $zn.i0   # Aufruf des Counter-Scripts
    
    ifset erw || erw=bin
    conv -l erw
    ct=text/plain
    
    case "$erw" in
      shtml|html|htm|php3)  ct=text/html ;;
      txt|bsh|pl|text)      ct=text/plain ;;
      exe|bin|zip|gz|tar|drv|z|obj|o)
                            ct=application/octet-stream ;;
      gif)                  ct=image/gif ;;
      jpg|jpeg)             ct=image/jpeg ;;
      *)                    ct=text/plain ;;
    esac
    
    catv ."Content-type: " ct /%n%n 0 =1  < "$dir$pre$nam"
         # Durchreichung des Dateiinhalts
    exit 0
catv  schreibt den Inhaltstyp zum Server (stdout; Handle 1) und dann den Inhalt von stdin (Handle 0).

.

^

Manual-Kreator

Die html-Manual-Sammlung bshmnk.htm wird hiermit erzeugt:
#!/home/bin/bsh

Head='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
   <TITLE>.../schellong : bsh-Manual (bshmnk.htm)</TITLE>
   ........
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#CDAA7D" LINK="#4F94CD" VLINK="#36648B" ALINK="#FFD700">
............
'

cd /u/bsh/man
Ziel=/home/hp/2/de/htm/bshmnk.htm
prints vsf_2000 Zeile

List='bsh.mnk cat.mnk crc.mnk cut.mnk
echo.mnk expr.mnk grep.mnk line.mnk
wc.mnk rel.mnk tr.mnk test.mnk
tee.mnk man.mnk regexp.mnr ansi.mnr
readc.mnk bgrep.mnk calc.mnk cmp.mnk
dat.mnk dd.mnk hx.mnk ov.mnk
pg.mnk timex.mnk touch.mnk vi.mns'

catv Head > $Ziel

echo '<a name="topp"></a><br><br>' >> $Ziel
echo '<h1>Manuals zur bsh</h1>' >> $Ziel
echo '<table bgcolor="#EEEEE0" width="100%" cellpadding="10"><tr><td>' >> $Ziel
for File in  $List
do
   expr "$File" :Name '^%(..*%)%.mn.$' || continue
   expr "$File" :Man '%(.%)$' || continue
   conv -u Man
   echo "<font size=%"+1%"><a href=%"#$Name%">$Name($Man)</a></font><br>" >> $Ziel
done
echo '<br>Copyright © 1995-2001  Helmut Schellong<br>' >> $Ziel
echo '</td></tr></table><br>' >> $Ziel

for File in  $List
do
   expr "$File" :Name '^%(..*%)%.mn.$' || continue
   echo "<a name=%"$Name%"></a><br>" >> $Ziel
   echo '<h1><a href="#topp">^</a></h1>' >> $Ziel
   echo "<table bgcolor=%"#FFFFF0%" width=%"100%%%" cellpadding=%"7%"><tr><td><font color=%"#8B3A3A%"><b><pre>" >> $Ziel
   echo $File ...
   < $File
   while readl Zeile
   do
      expr "$Zeile" :Zeile '?'  += 'ä'
      expr "$Zeile" :Zeile 'á'  += 'ß'
      expr "$Zeile" :Zeile '?'  += 'ü'
      expr "$Zeile" :Zeile '?'  += 'ö'
      expr "$Zeile" :Zeile '?'  += 'Ä'
      expr "$Zeile" :Zeile 's'  += 'Ü'
      expr "$Zeile" :Zeile '?'  += 'Ö'
      expr "$Zeile" :Zeile 'yright *([cC])'  = 'yright ©'
      expr "$Zeile" :Zeile '([rR])'  += '®'
      expr "$Zeile" :Zeile '&'  += '&amp;'
      expr "$Zeile" :Zeile '<'  += '&lt;'
      expr "$Zeile" :Zeile '>'  += '&gt;'
      expr "$Zeile" :Zeile '"'  += '&quot;'
      expr "$Zeile" :Zeile '|'  += '&brvbar;'
      expr "$Zeile" :Zeile 'ù'  += '&middot;'
      expr "$Zeile" :Zeile '[ú·]'  += '&middot;'
      expr "$Zeile" :Zeile '[§]'  += '&sect;'
      catv Zeile /%n >> $Ziel
   done
   ><
   echo '</pre></b></font></td></tr></table><br>' >> $Ziel
done

echo '
</BODY>
</HTML>' >> $Ziel
.


^

Hinweise

Beispiele sind in großer Anzahl auch in der normalen bsh-Dokumentation enthalten!
Auch das große Script  start.bsh  ist ein reichhaltiges Anschauungsbeispiel.

Beseitigung von Vorurteilen zur bsh:
Um die 'bsh' zu nutzen, braucht man überhaupt nichts zu lernen!
Und aufwendig installieren muß man die Shell ebenfalls nicht!
Man muß nur die Datei 'bsh.exe' und dazu das gewünschte Script (xyz.bsh) haben.
Beides kann man nach  c:\dos  kopieren.
Dann macht man einen Aufruf:   C:\> bsh xyz.bsh   und das war's auch schon!
Größere Scripts zeigen danach ein Menü, wo man zur Bedienung
nur einzelne Buchstaben eintippen muß, und manchmal irgendwelche Bezeichnungen.

Nur, wer selbst bsh-Scripts entwickeln oder in vergleichbarer Weise in der
Kommandozeile einer interaktiven 'bsh' arbeiten möchte, muß sich intensiv
mit der Dokumentation beschäftigen.
 

Die Scripts haben -wenn sie neu sind- noch Beta-Status.
Erfolgreich ausprobiert wurde zwar alles, jedoch oft nur unter Unix, mit der Vollversion,
und nicht alle denkbaren Variationen testend.
Störfälle möge man mir mitteilen.

Einige Scripts sind ein minimierter Auszug aus sehr anspruchsvollen Script-Dateien,
damit sie auch mit der Shareware-Version der  bsh  funktionieren.

Zur Ausführung der hiesigen Scripts braucht man standardmäßig nur bsh.exe .
Die Verwendung von beispw.  dd.exe, bgrep.exe, l.exe, etc.  wurde vermieden.

Man kann bsh-Syntax auf unterschiedliche Art und Weise zur Ausführung bringen:

    edit datei.bsh
    bsh datei.bsh [args ...]             (1)
    bsh
    #  Kommandozeile
    #  . datei.bsh
    #  datei.bsh  [args ...]             (2)
Dies waren unterschiedliche Ausführungsformen; vorzugsweise (#).
Der Pfad zu 'datei.bsh' sollte in PATH enthalten sein, andernfalls muß man volle Pfadnamen
angeben.
Script-Dateien für die  bsh  sollten idealerweise die Endung  .bsh  haben;
diese Endung wird automatisch probiert.

Das Shell-Programm  bsh.exe  läuft quasi überall !
Die Vollversion, die Shareware, die Unix-Version,
unter allen DOS-Systemen und in allen DOS-Boxen,
auch unter DOS-Emulatoren bei Linux, SCO und anderen Unixen,
und auf jeder Hardware ab 386sx/16 .

Falls Sie Probleme haben sollten, dann liegt das garantiert nicht an der 'bsh',
sondern Sie haben beim Download einen Übertragungsfehler gehabt (sehr selten)
oder, was wahrscheinlicher ist, Ihr Win95-System ist irgendwie kaputtinstalliert worden!
Die DOS-Versionen der 'bsh' benötigen etwa 165 KB Arbeitsspeicher.
Man kann die 'bsh' maximal 3-fach verschachtelt starten:

Caldera DR-DOS, mem /d:

-- Address --- Name ----- Size ------------- Type -----------------------------
|  395:0000 | SETVERXX |    1F0h,     496 |  DEVICE = installed device driver |
|  55E:0000 |  COMMAND |    1F0h,     496 | Program                           |
|  57D:0000 |  COMMAND |    C10h,   3.088 | Environment                       |
|  63E:0000 |      BSH |    3D0h,     976 | Environment                       |
|  67B:0000 |      BSH |  23F20h, 147.232 | Program                           |
| 2A6D:0000 |      BSH |    3D0h,     976 | Environment                       |
| 2AAA:0000 |      BSH |  23F20h, 147.232 | Program                           |
| 4E9C:0000 |      BSH |    3D0h,     976 | Environment                       |
| 4ED9:0000 |      BSH |  23F20h, 147.232 | Program                           |
| 72CB:0000 |      MEM |    3D0h,     976 | Environment                       |
| 7308:0000 |      MEM |  15C10h,  89.104 | Program                           |
| 88C9:0000 | -------- |  16240h,  90.688 | FREE                              |
| 9EED:0000 |      BSH |     60h,      96 | Data                              |
| 9EF3:0000 |      BSH |     60h,      96 | Data                              |
| 9EF9:0000 |      BSH |     60h,      96 | Data                              |

MS-DOS mem /d:

  Segment               Total        Name         Type
  -------          ----------------  -----------  --------
                      2,352    (2K)     MERGEXMS  Installed Device=MRGXMS  
   00517              2,208    (2K)  MRGTSR       Program
   00779                128    (0K)  BSH          Environment
   00781            147,232  (144K)  BSH          Program
   02B73                128    (0K)  BSH          Environment
   02B7B            147,232  (144K)  BSH          Program
   04F6D                128    (0K)  BSH          Environment
   04F75            147,232  (144K)  BSH          Program
   07367                128    (0K)  MEM          Environment
   0736F             88,992   (87K)  MEM          Program
   08929             93,248   (91K)  MSDOS        -- Free --
   09FED                 96    (0K)  BSH          Data
   09FF3                 96    (0K)  BSH          Data
   09FF9                 96    (0K)  BSH          Data


^

Lizenz

Free_Lizenz/Freeware/Shareware; Kostenfreie Homepage-Angebote

30.07.01
Das Copyright  ©  besitzt allein der Autor.  (Hier: Helmut Schellong)
Copyright- und sonstige Autoren-Hinweise müssen unangetastet bleiben. 

Siehe Datei  lizenz.htm/lizenz.txt .

Der Inhalt der zentralen Lizenz-Datei lizenz.htm hat Vorrang vor anderen Lizenz-Texten, die (noch) abweichend sein können.

Scripts:
Scripts für die 'bsh' sind lesbare Textdateien, die die bsh-Programmiersprache enthalten.
Die Scripts dürfen verändert werden, jedoch nur unverändert weitergegeben werden.
Wer hinter alle vorhandenen Copyright-Hinweise
 "Änderung/Erweiterung Jahr:  Vorname Name"
einfügt und falls das veränderte Script einwandfrei funktioniert,
der darf auch ein solchermaßen verändertes Script weitergeben.

Aus dem lesbaren Quelltext der Scripts darf kein gewerblicher Nutzen gezogen werden.
Diese Inhalte oder Teile davon dürfen nicht fälschlich als 'eigene Leistung'
deklariert werden.
Bei jeglicher Verwendung des Quelltextes müssen die Copyright-Hinweise
'mitgenommen' werden.


^

Bugs im Shell-Programm bsh
Reguläre Ausdrücke:
Das Dollarzeichen$ am Ende des Ausdrucks, welches das Zeilenende symbolisiert,
funktioniert in den meisten Fällen nicht.
Es muß dann ersatzweise  %r  oder  %r%n  angegeben werden.
Beim grep-Kommando funktioniert es nie,
beim expr-Kommando nur, wenn der Vergleichs-String am Ende
keine Zeilenende-Zeichen (0x0D0x0A) enthält.
Neuere Versionen als 16Mai98, sind korrigiert. 

Man kann/konnte das %-Zeichen nicht mit sich selbst maskieren.
Abhilfe:   [%]   statt    %%    angeben.

Wildcards:
Bei Verwendung von beispielsweise  [-+][0-9]*  muß der Bindestrich (-) vorne stehen,
nicht so:  [+-]  , um dessen Spezialbedeutung zuverlässig abzuschalten.

read-Kommando:
Beim Lesen aus einer Datei mit mehreren Argumenten und Variablen und mehr als 90 Zeilenlänge
gab es fehlerhafte Argumentspeicherungen eines Argumentes.

tr-Kommando:
tr '[a-b][x-\255]' '[y*]'
Hierbei wurden zu viele Zeichen in 'y' umgewandelt.
Das geschah nur mit \255, mit keiner anderen Zahl, und nur in diesem Kontext.
Abhilfe:  tr '\255[a-b][x-\254]' '[y*]'

Arithmetische Berechnungen:
Bei    "y= !x ? 1 : x"   gab es -manchmal in manchen Scripts- erkennbare Speicherverletzungen!
Abhilfe:  "y= x==0 ? 1 : x"    oder    "y= !x ? 1+0 : x"
Dies war ein ganz 'ekelhafter' Bug, der sich lange Zeit nicht zeigte!

dirname-Kommando:
Ab irgendeiner Version war es fehlerhaft:  terminierendes '\0'-Zeichen fehlte.
Abhilfe:  expr-Kommando benutzen.

Indirekter Variablenzugriff:
In manchen Kontexten gab es in inaktivem Kode bei beispielsweise   ${{1}
eine überflüssige Fehlermeldung.
Abhilfe:   local iv=$1; ... ; ${{iv}     global:  iv=___

Zur Hauptseite