Shell Bsh
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Das Shell-Programm bsh, entwickelt von HelmutSchellong.


Neueste Version v5.00 (August 2015)

Ich habe eine große regex-Engine XRE in die bsh eingebaut.

Bekannte Maschinen sind:

 JGsoft .NET Java  Perl  PCRE PCRE2
Bei deren Entwicklung habe ich massivst gegen fast alle MISRA-Regeln verstoßen.

Die bsh-XRE dürfte zur weltweiten Spitzengruppe der regex-Engines gehören.

  http://www.schellong.de/htm/bshmnk.htm#xregexpR
  http://www.schellong.de/htm/bshmnk.htm#exprK
  http://www.schellong.de/htm/bshmnk.htm#grepK
  http://www.schellong.de/htm/bshmnk.htm#bshK
Download bsh V5.00: http://www.schellong.de

Es handelt sich um kostenlose Software.
Autoren-Hinweise können per Environment-Variablen abgeschaltet werden.


Neue Version v4.10 (readv, ...)

Hauptdokumentation: Manuals (aktuellste): Kleiner Script-Sprachen-Lehrgang: Beispiele: Gvim-Editor: (Siehe auch HelmutSchellong) (Die Win-Varianten haben einen umfangreichen ANSI-Treiber für ESC-Sequenzen eingebaut. -S)

bsh gibt es per FreeLizenz zum kostenlosen Download, ohne eingebautes Zeitlimit.
Vollversionen ohne Rabatt sind relativ teuer - u.a. wegen der großen Anzahl interner Kommandos.

Die FreeLizenz hat sich geändert: Auch gewerbliche Verwendung ist jetzt unbeschränkt, und die Hinweistexte lassen sich mittels Environment-Variablen komplett abschalten, und das Nesting-Limit ist beseitigt. Aktuelle Version ist 3.40.

Die bsh unterscheidet sich von allen anderen Shells, obwohl sie recht weitgehend kompatibel mit ksh/sh ist.
Es gibt viele zusätzliche Ausstattungsmerkmale und Konzepte, die es in anderen Shells nicht oder in anderer Form und Ausgestaltung gibt.

Interne Kommandos

bsh hat etwa 100 interne Kommandos:

     grep [ -FSchilnm[#]qsvyxL ] [ -e ] RA [ datei ... ]
     fstat [-|+FitfplugJNsamcnhTv?] [name...|wert...] file...|handle...
Das sind nur zwei davon.
Wobei dieses interne grep mehr kann als jedes andere Unix-grep, und 2..6-fach schneller ist.
Dies trifft auf die meisten internen bsh-Kommandos zu.

Hier alle, ohne Programmier-Kommandos (if, while, for, case, ...):

     .        :        alias    array    autor    base     basename break
     cat      catv     cd       chdir    cmpv     continue conv     copy
     crc      ctime    cut      dirname  echo     env      eval     exec
     exit     export   expr     extern   false    fmode    fork     fprint
     fsize    fstat    fullname global   goend    goto     grep     ifdef
     ifset    ifenv    inv      kill     let      line     link     list
     local    localset mkdirs   mktemp   move     mtime    print    prints
     prompt   pwd      read     readc    readl    readonly rel      remove
     return   sane     seek     set      shift    sleep    sortl    static
     stime    sum      system   systime  tee      test     times    tr
     trap     true     type     typeset  tz       umask    unalias  unexport
     unset    unsetenv ver      wait     wc       whence   nop      readv

Dies hat folgenden großen Vorteil:
Man braucht nur eine bsh-Exe und hat damit praktisch alles, was man benötigt - und zwar portabel.

Als Kommandozeilen-Editor (-E) ist eine erweiterte doskey-Variante eingebaut.
Das gefällt mir besser als diese komischen vi-Einbauten bei ksh usw.

bsh hat echte lokale und lokal-statische Variablen.
Globale Shell-Variablen und Environment-Variablen kommen hinzu.

bsh gestattet (bedingte) Funktionsdefinitionen innerhalb von Shell-Funktionen.

bsh benutzt voreingestellt seek-bare Dateiendabschnitte als Pipe-|-Puffer:

     Beispielsweise:  xyz | ftp 
     cat datei | {
        > datei                 #Loeschen von datei
        while readl zeile; do   #Lesen aus pipe-Datei
           print -r xxx         #Neuschreiben von datei...
        done
        ><
     } 
bsh unterstützt zusätzlich globale -dauerhafte- Umlenkungen.
Das entspricht fast open()...close() , wird aber mit den normalen Umlenkungszeichen < > vorgenommen.
Basierend auf den Handles 0..9 funktioniert diese Einrichtung auch vielfach verschachtelt.

Das General-Maskierzeichen ist per Default: % .
Mit Option -B oder set -B kann der Backslash \ gewählt werden.

bsh verarbeitet Reguläre Ausdrücke - als Grundstock gemäß 'ed / sed'.
Dazu gibt es viele Erweiterungen, wie von vi, vim, perl bekannt.
Auch Suchen und Ersetzen ist mit expr möglich.

bsh hat einen eingebauten Arithmetik/Logik-Modul, der mehr Operationen unterstützt als die Sprache C.
Es werden die Zahlenbasen von 2..36 + 256 verarbeitet.
Bei bsh64 wird mit 64Bit-Integer gerechnet.
Drei Syntaxformen sind vorhanden:

 ...   $...   let "..." ...
bsh ist im Vergleich überdurchschnittlich sicher.
Es wird kein Fehler akzeptiert, egal von welcher Art - bsh bricht sofort ab.
Dieses Verhalten erzwingt professionelles Programmieren,
beispielsweise mit vielen Prüfsequenzen: [ -s datei ] || err 3

Die ausführbaren Dateien (Exe) der bsh sind -ob des Inhalts- überraschend klein.
Die 'natürliche' Größe beträgt nur etwa 120..140 KB (static).
Wenn beispw. die Linux-static-Exe 340 KB hat, so wird das durch sehr pauschal konzeptionierte Library-Verbunde verursacht.
(Sehr viel unnötig dazugelinkt.)
[Leider funktionieren Dynamic-Exe fast nie auf Systemen, wo diese Exe nicht hergestellt wurde.]

Zeitvergleich

bsh ist sehr schnell:

Arbeitstemposchneller =>
bsh
ksh
zsh
bash
csh
4dos
sh

Scriptbshkshzshbashcshsh4dos.com
loop11.1111.419.439.0205.37.2
loop11.079.119.330.633.927.0
s7011.6412.9 29.3265.52.2
s7011.6412.7 29.151.847.2

 bsh und SCO-ksh verweisen alle anderen auf die Plätze!
 (Quelle: bsh.mnv, 1996-98)

(Die Geschwindigkeit der bsh hat sich übrigens kürzlich etwa verdoppelt.)

CGI unter Embedded-DOS

bsh ist meines Wissens der einzige Interpreter, den man hier einsetzen kann, anstelle von Compiler-Sprachen.

Ich habe bsh portiert auf den IPC@CHIP (i80186,Streichholzschachtel): 65KB Flash-ROM (pklite), 160KB RAM.
Hinzugefügt wurden die ext-, com- und sem-Kommandos (Serial, Semaphore).
Abgespeckt wurden nur Kommandozeileneditor, sortl-Kommando, u. ähnl.

Solche Systeme sind zwar sehr klein, preiswert und haben eine geringe Leistungsaufnahme, jedoch die CGI-Programmierung gestaltet sich gänzlich anders als üblich: Der WebServer kann keine Skripte ausführen und keine Ausgabe auf Handle 1 entgegennehmen! Es muß ein 16Bit-Programm (Large model, z. B. cgi.exe) in C mit CallBack?-Funktionen geschrieben werden, wobei jeder CallBack? ein Name zugeordnet und angemeldet werden muß, der dann wie ein Dateiname hinter dem URL verwendet werden kann.

Mit Hilfe von bsh sieht die Angelegenheit wesentlich besser aus: Bei Kontaktaufnahme mit einem Browser erhält man fast den Eindruck als ob da ein ausgewachsenes Unix-System mit Apache-Webserver werkelt. Man erhält mehr als 10 html-Dateien bis zu je 80 KB und kann mehrere 100 Hardware-Einheiten (über Modem) verwalten, konfigurieren und deren Alarme kontrollieren. bsh bohrt quasi die normalerweise machbare Funktionalität um einen Faktor 10-20 auf - ohne zusätzliche Flash-Disk. Das alles auf einem System, das nur etwa 150 KB Festspeicher und etwa 250 KB RAM (einschl.RamDisk?) bietet.

CGI unter Linux/Unix

Es wird gesagt, daß CGI-Programmierung mit Shells "Schwachsinn" sei.
Dieser Aussage kann man allgemein durchaus zustimmen - aber nicht bsh betreffend!
Meine WebSeite wird seit Jahren von bsh als CGI-Interpreter kontrolliert. Und seit über einem Jahr gibt es einen besonderen WebCounter?, der seit einiger Zeit nicht nur mir und Kollegen/Bekannten offensteht, sondern auch fremden Personen. bsh funktioniert hier seit mehr als 100000 Aufrufen einwandfrei und stabil, vom WebSpaceProvider? kamen niemals Klagen, und die Entwicklung der Skripte dauerte nur etwa 10 Tage - na also.


Wenn alle Merkmale insgesamt betrachtet und verglichen werden, kann man zu dem Schluß kommen, daß bsh leistungsfähige und hilfreiche Software ist, die keinen Vergleich zu scheuen braucht.

-- HelmutSchellong


Fragen / Antworten / Diskussion

Frage: Wo finden sich die in der Tabelle genutzten Benchmarks loop und s70? Ein Vergleich mit anderen modernen SkriptSprachen wäre da ja eigentlich ganz interessant. -- PeterFunk

2cm tiefer ist eine Quelle angegeben. [manw.exe, bsh321.zip]
Bisher habe ich nur Shells verglichen; perl wird bei vielen Einzeltests wohl schneller sein, weil kein reiner Interpreter und wegen der hemmungslosen Ressourcennutzung.
Gibt es zu bsh321.zip auch eine URL? Welche Art der Resourcennutzung ist gemeint? Hauptspeicher? Plattenplatz? Cpu-Zyklen? StartupZeit? --PeterFunk
Die erste Frage wundert mich: HelmutSchellong
Warum? Welche Frage? Ein Benchmark hat doch eigentlich nur Sinn, wenn man ihn mit anderen Sachen vergleichen kann. Oder steht hinter bsh321.zip jetzt nicht der Benchmark-Code sondern die Software für bsh selbst? Ich habe das vielleicht nur falsch verstanden, aber ich habe oben ja nachdem zitierten Benchmark gefragt. --PeterFunk
Ich wundere mich, dass nach einem URL zu bsh321.zip gefragt wird!
Denn - wo ist der wohl zu finden?! -- Unter HelmutSchellong natürlich!
Ja, in bsh321.zip ist die bsh-Software(16Bit) selbst enthalten.
Ja, in bsh321.zip ist auch die oben genannte bsh.mnv enthalten, also auch die Testquellen!

perl ist quasi ein Compiler, er kompiliert ein Script und bringt es in dieser Form zur Ausführung. Und man kann an jeder Stelle soviel Speicher verbrauchen soweit die Systemressourcen reichen.
bsh ist ein 100% reiner Interpreter. Absolut alles wird so ausgeführt, wie es da steht, auch zeitlich.
Ich hab mal bei einer ksh ein echo xxx in einer Schleife gehabt: Die echo-Ausgabe erfolgte erst nachdem alle Durchläufe fertig waren! Das gefällt mir nicht. bsh ist (auch) hier total direkt.--hs
Hängt das nicht mit der verwendeten C-Library zusammen? Ein printf auf einem Terminal wird z. B. auch erst dann ausgegeben, wenn ein Zeilenende enthalten ist oder explizit ein flush(stdout) ausgeführt wird. Viele Interpreter und SkriptSprache reichen diese Eigenschaften von stdio quasi ungekocht durch. Vielleicht ist das auch bei der ksh so? --PeterFunk
Die Pufferart läßt sich ohnehin beliebig einstellen mit setvbuf();
aber das echo xxx hat ja jedesmal einen Zeilenvorschub!


KategorieSoftwareTool ProduktBeschreibung KategorieUnix KategorieShell
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 24. August 2015 19:56 (diff))
Suchbegriff: gesucht wird
im Titel
im Text