Shell-Skript

A Shell-Skript ist ein Computer Programm entworfen, um von der betrieben zu werden Unix Shell, a Befehlszeilen-Interpreter.[1] Die verschiedenen Dialekte von Shell -Skripten werden als sein Skriptsprachen. Typische Operationen, die von Shell -Skripten ausgeführt werden, umfassen Dateimanipulation, Programmausführung und Drucktext. Ein Skript, das die Umgebung einstellt, das Programm ausführt und die erforderliche Reinigung oder Protokollierung durchführt, heißt a Verpackung.
Der Begriff wird auch allgemeiner verwendet, um den automatisierten Modus des Ausführens einer Betriebssystemschale zu bedeuten. Jedes Betriebssystem verwendet einen bestimmten Namen für diese Funktionen, einschließlich Stapeldateien (MSDOS-Win95-Stream, OS/2), Befehlsprozeduren (VMs) und Shell -Skripte (Skripte (Windows NT Stream- und Drittanbieter-Derivate wie 4nt- Kartikel ist bei cmd.exe) und Mainframe -Betriebssysteme sind mit einer Reihe von Begriffen verbunden.
Muscheln, die üblicherweise in UNIX- und UNIX-ähnlichen Systemen vorhanden sind Korn Shell, das Bourne Shell, und Gnu Bash. Während ein Unix -Betriebssystem möglicherweise eine andere Standardschale hat, wie z. ZSH an Mac OSDiese Shells sind in der Regel für die Rückwärtskompatibilität vorhanden.
Fähigkeiten
Kommentare
Kommentare werden von der Hülle ignoriert. Sie beginnen normalerweise mit dem Hash -Symbol (#
) und fahren Sie bis zum Ende der Linie fort.[2]
Konfigurierbare Auswahl der Skriptsprache
Das Shebang, oder Hash-Bang, ist eine besondere Art von Kommentar, mit der das System feststellt, mit welchem Interpreter die Datei ausgeführt werden soll. Der Shebang muss die erste Zeile der Datei sein und mit "beginnen"#!
".[2] In Unix-ähnlichen Betriebssystemen folgen die Charaktere dem "#!
"Präfix werden als Weg zu einem ausführbaren Programm interpretiert, das das Skript interpretiert.[3]
Verknüpfungen
Ein Shell-Skript kann eine bequeme Variation eines Systembefehls liefern, bei dem spezielle Umgebungseinstellungen, Befehlsoptionen oder Nachbearbeitung automatisch gelten, jedoch auf eine Weise, die es dem neuen Skript ermöglicht, weiterhin als vollständig normal zu wirken UNIX -Befehl.
Ein Beispiel wäre, eine Version von zu erstellen ls, Der Befehl zum Auflisten von Dateien und gibt ihm einen kürzeren Befehlsnamen von l
, was normalerweise in einem Benutzer gespeichert werden würde Behälter
Verzeichnis als /Home/Benutzername/bin/l
und ein Standardsatz der Befehlsoptionen, die vorgegeben werden.
#!/bin/sh Lc_collate=C ls -fcas "$@"
Hier verwendet die erste Zeile a Shebang Um anzugeben, welcher Interpreter den Rest des Skripts ausführen soll, und in der zweiten Zeile wird eine Liste mit Optionen für Dateiformatanzeigen, Spalten, alle Dateien (keine weggelassen) und eine Größe in Blöcken erstellt. Das Lc_collate = c
Legt die Standardauftragsreihenfolge fest, um das obere und untere Gehäuse nicht zusammen zu falten, nicht mit Intermix Dotfiles Mit normalen Dateinamen als Nebeneffekt des Ignorierens der Interpunktion in den Namen (Dotfiles werden normalerweise nur angezeigt, wenn eine Option wie -a
wird verwendet) und die "$@"
verursacht alle angegebenen Parameter an l
als Parameter an LS durchgehen, damit alle normalen Optionen und andere Optionen Syntax LS kann noch verwendet werden.
Der Benutzer könnte dann einfach verwenden l
Für die am häufigsten verwendete Kurzauflistung.
Ein weiteres Beispiel für ein Shell -Skript, das als Verknüpfung verwendet werden könnte, besteht darin, eine Liste aller Dateien und Verzeichnisse in einem bestimmten Verzeichnis zu drucken.
#!/bin/sh klare ls -al
In diesem Fall würde das Shell -Skript mit seiner normalen Startlinie von beginnen #!/bin/sh. Im Anschluss an das Skript wird der Befehl ausgeführt klar Das löscht das Terminal des gesamten Textes, bevor Sie in die nächste Zeile gehen. Die folgende Zeile bietet die Hauptfunktion des Skripts. Das ls -al Der Befehl listet die Dateien und Verzeichnisse auf, die sich im Verzeichnis befinden, aus dem das Skript ausgeführt wird. Das ls Befehlsattribute könnten geändert werden, um die Bedürfnisse des Benutzers widerzuspiegeln.
Hinweis: Wenn eine Implementierung nicht die hat klar Befehl, versuchen Sie die Verwendung des CLR Befehl stattdessen.
Batch -Jobs
Shell-Skripte ermöglichen es, mehrere Befehle, die manuell an einer Befehlszeilenschnittstelle automatisch ausgeführt werden, und ohne darauf warten zu müssen, dass ein Benutzer jede Stufe der Sequenz auslöst. In einem Verzeichnis mit drei C -Quellcode -Dateien, anstatt die vier Befehle, die zum Erstellen des endgültigen Programms aus ihnen erforderlich sind Posix-Compliant Shells, hier benannt bauen
und im Verzeichnis mit ihnen aufbewahrt, was sie automatisch kompilieren würde:
#!/bin/sh printf 'Kompilien ... \ n' cc -c foo.c cc -c bar.c cc -c qux.c cc -o myprog foo.o bar.o qux.oprintf 'fertig. \ n'
Das Skript würde es einem Benutzer ermöglichen, die zu bearbeitende Datei zu speichern, den Editor zu pausieren und dann einfach auszuführen ./bauen
Um das aktualisierte Programm zu erstellen, testen Sie es und kehren Sie dann zum Editor zurück. Seit den 1980er Jahren wurden jedoch Skripte dieser Art durch Versorgungsunternehmen ersetzt machen die für den Bau von Programmen spezialisiert sind.
Verallgemeinerung
Einfache Batch -Jobs sind für isolierte Aufgaben nicht ungewöhnlich, aber die Verwendung von Shell -Schleifen, Tests und Variablen bietet den Benutzern viel mehr Flexibilität. Ein POSIX SH-Skript zum Umwandeln von JPEG-Bildern in PNG-Bilder, bei denen die Bildnamen in der Befehlszeile-möglicherweise über Wildcards-bereitgestellt werden, kann mit dieser Datei erstellt werden, die normalerweise in einer Datei wie gespeichert ist /Home/Benutzername/bin/jpg2png
#!/bin/sh zum JPG; tun # Verwenden Sie $ JPG anstelle jedes angegebenen Dateinamens, wiederum png=$ {JPG%.jpg}.png # Konstruieren Sie die PNG -Version des Dateinamens, indem Sie .jpg durch .png ersetzen printf 'konvertieren "%s" ... \ n' "$ jpg" # Ausgabestatusinformationen an den Benutzer, der das Skript ausführt wenn Konvertieren "$ jpg" jpg.to.png; dann # Verwenden Sie Convert (von Imagemagick bereitgestellt), um das PNG in einer Temp -Datei zu erstellen MV JPG.TO.PNG "$ png" # Wenn es funktioniert, benennen Sie das temporäre PNG -Bild in den richtigen Namen um anders # ... Ansonsten beschweren Sie sich und beenden Sie das Skript aus printf >&2 'JPG2PNG: ERROR: Fehlgeschlagene Ausgabe in "jpg.to.png". \ n' Ausfahrt 1 fi # Das Ende des "If" -Testkonstrukts erledigt # das Ende der "für" Schleife printf 'Alle Conversions erfolgreich \ n' # Sagen Sie dem Benutzer die guten Nachrichten
Das JPG2PNG
Der Befehl kann dann auf einem gesamten Verzeichnis voller JPEG /home/userername/bin/jpg2png *.jpg
Programmierung
Viele moderne Muscheln liefern auch verschiedene Merkmale, die normalerweise nur in raffinierterer gefunden werden allgemeine Programmiersprachen, wie Kontroll-Flow-Konstrukte, Variablen, Kommentare, Arrays, Unterroutinen usw. Mit diesen verfügbaren Funktionen ist es möglich, relativ ausgefeilte Anwendungen als Shell -Skripte zu schreiben. Sie sind jedoch weiterhin durch die Tatsache begrenzt, dass die meisten Shellsprachen für Datentypsysteme, Klassen, Threading, komplexe Mathematik und andere gemeinsame Sprachmerkmale nur wenig oder gar keine Unterstützung haben und im Allgemeinen auch viel langsamer als kompilierte Code oder interpretierte Sprachen geschrieben sind mit Geschwindigkeit als Leistungsziel.
Die Standard -Unix -Tools sed und awk Bereitstellung zusätzlicher Funktionen für die Shell -Programmierung; Perl kann auch in Shell -Skripte eingebettet werden, wie andere Skriptsprachen mögen Tcl. Perl und TCL sind auch mit Grafik -Toolkits ausgestattet.
Typische POSIX -Skriptsprachen
Zu den in UNIX, Linux und POSIX-konformen Betriebssysteminstallationen häufig vorkommenden Skriptsprachen gehören:
- Kornshell (
ksh
) in mehreren möglichen Versionen wie KSH88, Korn Shell '93 und anderen. - Das Bourne Shell (
Sch
) Eine der ältesten Schalen, die noch immer üblich sind - Das C Shell (
CSH
) - Gnu Bash (
verprügeln
) -
tclsh
, eine Schale, die eine Hauptkomponente der ist Tcl/tk Programmiersprache. - Das Wunsch ist eine GUI-basierte TCL/TK-Shell.
Fernschalen
- a Fernschale (
rsh
) - a Sichere Schale (
ssh
)
Die C- und TCL -Shells haben Syntax ziemlich ähnlich der der Programmiersprachen, und die Korn -Shells und Bash sind Entwicklungen der Bourne -Shell, die auf dem basiert Algol Sprache mit Elementen einer Reihe anderer auch hinzugefügt.[4] Andererseits mögen die verschiedenen Schalen plus Werkzeuge awk, sed, Grep, und BASIC, Lispeln, C und so weiter trug zur Perl Programmiersprache.[5]
Andere Shells, die möglicherweise auf einem Computer oder zum Download und/oder zum Kauf erhältlich sind, sind:
- Almquist Shell (
Asche
) - Power Shell (
MSH
) - Z Shell (
ZSH
, eine besonders häufig verstärkte Kornshell) - Das Tenex C Shell (
TCSH
).
Verwandte Programme wie Shells basierend auf Python, Rubin, C, Java, Perl, Pascal, Rexx usw. in verschiedenen Formen sind ebenfalls weit verbreitet. Eine andere etwas häufige Hülle ist eine alte Hülle (OSH
), deren manuelles Seite sagt, "ist ein erweiterter, rückwärtskompatibler Port des Standardbefehlsinterpreters aus der sechsten Ausgabe Unix".[6]
Andere Skriptsprachen
Viele leistungsstarke Skriptsprachen wurden für Aufgaben eingeführt, die zu groß oder komplex sind, um bequem mit gewöhnlichen Shell-Skripten behandelt zu werden. . Die Besonderheiten dessen, was Skriptsprachen von trennt hochrangige Programmiersprachen ist eine häufige Debattenquelle, aber im Allgemeinen ist eine Skriptsprache eine, die einen Dolmetscher erfordert.
Lebenszyklus
Shell -Skripte dienen häufig als Anfangsphase in der Softwareentwicklung und unterliegen häufig einer Umstellung später in eine andere zugrunde liegende Implementierung, die am häufigsten konvertiert wird Perl, Python, oder C. Das Interpreter -Richtlinie Ermöglicht das Implementierungsdetail im Skript vollständig versteckt, anstatt als Dateiname -Erweiterung freigelegt zu werden, und sorgt für eine nahtlose Neuauflagen in verschiedenen Sprachen ohne Auswirkungen auf Endbenutzer.
Während Dateien mit dem ".sh" Dateierweiterung sind normalerweise ein Shell -Skript, die meisten Shell -Skripte haben keine Dateiname -Erweiterung.[7][8][9][10]
Vorteile und Nachteile
Der vielleicht größte Vorteil des Schreibens eines Shell-Skripts besteht darin, dass die Befehle und die Syntax genau den gleichen sind, wie sie direkt in der Befehlszeile eingegeben wurden. Der Programmierer muss nicht zu einer völlig anderen Syntax wechseln, wie es tun würde, wenn das Skript in einer anderen Sprache geschrieben würde oder wenn eine kompilierte Sprache verwendet würde.
Das Schreiben eines Shell -Skripts ist oft viel schneller als das Schreiben des äquivalenten Code in anderen Programmiersprachen. Zu den vielen Vorteilen gehören eine einfache Programm- oder Dateiauswahl, Schnellstart und interaktives Debuggen. Ein Shell-Skript kann verwendet werden, um eine Sequenzierungs- und Entscheidungsverknüpfung mit vorhandenen Programmen herzustellen, und für mäßig große Skripte ist das Fehlen eines Kompilierungsschritts von Vorteil. Interpretierendes Laufen erleichtert das Schreiben von Debugging-Code in ein Skript und führt ihn erneut aus, um Fehler zu erkennen und zu beheben. Nicht-Experten-Benutzer können mit Scripting das Verhalten von Programmen anpassen, und Shell Scripting bietet einen begrenzten Umfang für die Multiprozessierung.
Andererseits ist Shell -Skripting anfällig für kostspielige Fehler. Versehentliche Tippfehler wie z. rm -rf * /
(statt der beabsichtigten rm -rf */
) sind Folklore in der Unix -Community; Ein einzelner zusätzlicher Speicherplatz wandelt den Befehl von einem um, der alle im aktuellen Verzeichnis enthaltenen Unterverzeichnisse löscht, in eine, die alles aus dem Dateisystem löscht Wurzelverzeichnis. Ähnliche Probleme können sich verwandeln CP
und MV
in gefährliche Waffen und Missbrauch der >
Umleitung kann den Inhalt einer Datei löschen. Dies wird durch die Tatsache, dass sich viele Unix -Befehle im Namen nur um einen Buchstaben unterscheiden: CP
, CD
, dd
, df
, etc.
Ein weiterer erheblicher Nachteil ist die langsame Ausführungsgeschwindigkeit und die Notwendigkeit, einen neuen Prozess für fast alle ausgeführten Shell -Befehle zu starten. Wenn der Job eines Skripts durch Einrichten a erreicht werden kann Pipeline in welcher effizienten Filter Befehle erledigen den größten Teil der Arbeit, die Verlangsamung wird gemindert, aber ein komplexes Skript ist in der Regel mehrere Größenordnungen langsamer als ein herkömmliches kompiliertes Programm, das eine äquivalente Aufgabe ausführt.
Es gibt auch Kompatibilitätsprobleme zwischen verschiedenen Plattformen. Larry Wall, Schöpfer von Perl, schrieb bekannt, dass "es einfacher ist, eine Shell zu portieren als ein Shell -Skript."[Zitat Zitat benötigt]
In ähnlicher Weise können komplexere Skripte in die Grenzen der Shell -Skriptsprache selbst geraten. Die Grenzen erschweren es schwierig, Qualitätscode zu schreiben, und Erweiterungen verschiedener Schalen, um Probleme mit der ursprünglichen Shell -Sprache zu verbessern, können Probleme verschlimmern.[11]
Viele Nachteile bei der Verwendung einiger Skriptsprachen werden durch Designfehler innerhalb des Sprachsyntax oder Implementierung und werden nicht unbedingt durch die Verwendung einer textbasierten Befehlszeile auferlegt; Es gibt eine Reihe von Muscheln, die andere Shell-Programmiersprachen oder sogar vollwertige Sprachen wie verwenden Scsh (was verwendet Planen).
Interoperabilität zwischen Skriptsprachen
Verschiedene Skriptsprachen können viele gemeinsame Elemente teilen, vor allem aufgrund von POSIX -Basis, und einige Shells bieten Modi an, um verschiedene Shells zu emulieren. Dadurch kann ein Shell -Skript, das in einer Skriptsprache geschrieben wurde, in eine andere angepasst werden.
Ein Beispiel dafür ist Bash, das die gleiche Grammatik und Syntax wie die Bourne-Shell bietet und auch einen POSIX-konformen Modus bietet.[12] Daher können die meisten Shell -Skripte, die für die Bourne Shell geschrieben wurden, in Bash ausgeführt werden, aber das Gegenteil ist möglicherweise nicht wahr, da Bash Erweiterungen aufweist, die in der Bourne -Shell nicht vorhanden sind. Als solche werden diese Merkmale als Bashismen bezeichnet.[13]
Shell Scripting auf anderen Betriebssystemen
Interoperabilitätssoftware wie z. Cygwin, das MKS Toolkit, Interix (Das ist in den Microsoft Windows Services für UNIX verfügbar), Hamilton C Shell, DU GEWINNST (AT & T UNIX für Windows) und andere ermöglichen es Unix -Shell -Programmen auf Maschinen, die Windows NT und seine Nachfolger ausführen MS-DOS-Windows 95 Zweig sowie frühere MKS -Toolkit -Versionen für OS/2. Mindestens drei DCL -Implementierungen für Windows -Betriebssysteme - im Zusatz zu Xlnt, ein Mehrfachverbrauchs-Skriptsprachenpaket, das mit der Befehlsschale verwendet wird. Windows -Skript -Host und CGI Programmierung - stehen auch für diese Systeme zur Verfügung. Mac OS X und nachfolgende sind ebenfalls unixartig.[14]
Zusätzlich zu den oben genannten Werkzeugen einige einige Posix und OS/2 -Funktionalität kann auch mit den entsprechenden Umgebungssubsystemen der Windows NT -Betriebssystemserie bis zu Windows 2000 verwendet werden. Ein Drittel, 16-Bit Das Subsystem, das häufig als MS-DOS-Subsystem bezeichnet wird, verwendet den Befehl.com mit diesen Betriebssystemen, um die oben genannten MS-DOS-Stapeldateien auszuführen.[15]
Die Konsolenalternativen 4dos, 4OS2, Freedos, Peter Norton's Ndos und 4NT/Befehl nehmen, die den Windows NT-Stil Cmd.exe, MS-DOS/Windows 95-Batch-Dateien (von Befehlsfehl Sie verbessern und sind stärker in den Windows-Skript-Host integriert, der mit drei vorinstallierten Motoren ausgestattet ist, VBScript, Jscript, und VBA und zu denen zahlreiche Motoren von Drittanbietern hinzugefügt werden können, wobei Rexx, Perl, Python, Ruby und TCL vordefinierte Funktionen in 4NT- und verwandten Programmen haben. PC dos ist ms-dos ziemlich ähnlich, während Dr. Dos ist unterschiedlicher. Frühere Versionen von Windows NT können zeitgenössische Versionen von 4OS2 durch das OS/2 -Subsystem ausführen.
Skriptsprachen können per Definition erweitert werden; Beispielsweise ermöglicht ein MS-DOS/Windows 95/98- und Windows NT-Typ-Systeme Shell/Batch-Programme, um Tools wie aufzurufen KIXTART, Qbasic, verschiedene BASIC, Rexx, Perl, und Python Implementierungen, die Windows -Skript -Host und seine installierten Motoren. Auf Unix und anderen Posix-Compliant Systems, awk und sed werden verwendet, um die Fähigkeit der Zeichenfolge und der numerischen Verarbeitungsfähigkeit von Shell -Skripten zu erweitern. Tcl, Perl, Rexx und Python haben Grafik -Toolkits und können verwendet werden, um Funktionen und Prozeduren für Shell -Skripte zu codieren, die einen Geschwindigkeitsgpässe darstellen wie Sockets und andere Konnektivitätsfunktionen, Hochleistungs-Textverarbeitung, Arbeiten mit Zahlen, wenn das aufrufende Skript diese Fähigkeiten nicht verfügt, selbstschreiber und selbstmodifizierender Code, Techniken wie Rekursion, direkter Speicherzugriff, verschiedene Arten von Sortierung und mehr, die im Hauptskript schwierig oder unmöglich sind und so weiter. Visual Basic für Anwendungen und Vbscript kann verwendet werden, um solche Dinge wie Tabellenkalkulationen, Datenbanken, skriptierbare Programme aller Typen, Telekommunikationssoftware, Entwicklungswerkzeuge, Grafik -Tools und andere Software zu steuern und zu kommunizieren, auf die über die zugegriffen werden kann Komponentenobjektmodell.
Siehe auch
- Klebercode
- Interpreter -Richtlinie
- Shebang Symbol (#!)
- Unix -Muscheln
- Power Shell
- Windows -Skript -Host
Verweise
- ^ Kernighan, Brian W.; Pike, Rob (1984), "3. Verwenden der Shell", Die UNIX -Programmierumgebung, Prentice Hall, Inc., p. 94, ISBN 0-13-937699-2,
Die Shell ist eigentlich eine Programmiersprache: Sie hat Variablen, Schleifen, Entscheidungen usw.
- ^ a b Johnson, Chris (2009).[1] Pro -Bash -Programmierung: Scripting der Linux -Shell, Apress, abgerufen am 27. September 2019. ISBN9781430219989
- ^ "Exec (3p) - Handbuch des POSIX -Programmierers". Abgerufen 2020-07-24.
- ^ Unix-Shells mit Beispiel, S. 7-10,
- ^ Programmierung Perl, 5. Ausgabe, Vorwort
- ^ "OSH - Manned.org". Manned.org. Abgerufen 2019-01-16.
- ^ Robbins, Arnold; Hannah, Elbert; Lamb, Linda (2008). Lernen der VI- und VIM -Redakteure. p. 205. ISBN 9781449313258.
- ^ Easttom, Chuck (2012). Wesentliche Linux -Administration :: Ein umfassender Leitfaden für Anfänger. p. 228. ISBN 978-1435459571.
- ^ Kumari, Sinsy (23. November 2015). Linux -Shell -Skriptermeldungen. Packt Publishing Ltd. ISBN 9781783552375. Abgerufen 7. Mai, 2017.
Anstatt eine Dateierweiterung für Shell -Skripte zu verwenden, wird es vorgezogen, einen Dateinamen ohne Erweiterung zu behalten und einen Interpreter den Typ identifizieren zu lassen, indem Sie in Shebang (#!) Schauen Sie sich an.
- ^ Taylor, Dave; Perry, Brandon (16. Dezember 2016). Wicked Cool Shell Skripte, 2. Auflage: 101 Skripte für Linux-, OS X- und Unix -Systeme. Keine Stärkepresse. ISBN 9781593276027. Abgerufen 7. Mai, 2017.
Shell -Skripte benötigen keine spezielle Dateierweiterung. Lassen Sie die Erweiterung daher leer (oder Sie können die Erweiterung hinzufügen .Sh, wenn Sie es vorziehen, dies ist jedoch nicht erforderlich.
- ^ Christiansen, Tom. "CSH -Programmierung als schädlich angesehen".
- ^ "Hauptunterschiede zur Bourne Shell".
- ^ "24 Bashismus, um posix-konforme Shell-Skripte zu vermeiden".
- ^ Msdn[nicht spezifisch genug, um dies zu überprüfen]
- ^ Windows NT 4 Workstation Resource Kit
Externe Links
- Eine Einführung in die Shell -Programmierung von Greg Goebel
- Unix / Linux -Shell -Skript -Tutorial von Steve Parker
- Shell Scripting Primer (Apfel)
- Worauf Sie beim Schreiben tragbarer Shell -Skripte achten müssen von Peter Seebach
- Kostenlose Unix -Shell -Skriptbücher
- Anfänger/Bashscripting, Ubuntu Linux