ubuntuusers.de

Welche Skriptstandards gibt es?

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Unix_Samurai

Anmeldungsdatum:
10. Oktober 2008

Beiträge: 661

Hi.

Scripts werden ja in der Regel mit optionen, wie -o usw aufgerufen. Gibt es da einen Standardweg, wie man es programmiert? Und gibt es noch weitere Standards, an die mansich halten sollte?

MfG

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Grundsätzlich gibt es ja 1001 verschiedene Sprachen, die Du per Script benutzen kannst, - selbst mit sed kann man scripten ! (→ Shebang )

Allerdings meinst Du mit "Skripten" wahrscheinlich Shellskripte, und da benutzt man meistens bash (wegen der erweiterten Möglichkeiten) oder sh (= dash, die schlanker ist und auch auf Minimalsystemen läuft).

Manische Vorschriften gibt es da grundsätzlich nicht, aber was Du beachten solltest, kannst Du sehr schön in Greg's Wiki nachlesen.

LG,

track

posti

Anmeldungsdatum:
30. März 2009

Beiträge: 2087

Denke, er meint,

  • Optionen werden mit einem Bindestrich eingeleitet (aka -? )

  • nach doppeltem Bindestrich kommt ein ausgeschriebener Optionsname (aka --version oder --help )

  • nach doppeltem Bindestrich ohne folgende Option wird die Suche nach weiteren Optionen abgebrochen (aka – )

  • ein Script endet nach erfolgreicher Ausführung mit Exit-Code 0 (= kein Fehler)

MfG

Unix_Samurai

(Themenstarter)

Anmeldungsdatum:
10. Oktober 2008

Beiträge: 661

Danke.

Wie wird es eigentlich behandelt, wenn man einen Dateinamen mit - beginnen lässt und diesen Scripten beim Aufruf übergibt. Zb

1
sh script.sh -datei_die_mit_-_beginnt

Ist das unerlaubt? Oder gibt es da einen Trick?

MfG

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Servus,

du suchst wohl getopts:

http://www.unix.com/man-page/All/1/getopts/

Schau’ am besten auch in die Manpage auf deinem System. Da ist auch ein Beispiel enthalten, deshalb poste ich jetzt keins.

Für Dateinamen, die mit einem Dash beginnen, gibt es die Konvention, die Optionen exlizit mit zwei Dashes zu beenden (wie posti schon sagte):

./foo.sh -a -b bla -- -hier_etwas_böses

Das ist übrigens bei Verwendung von getopts kein Problem, wenn der Dateiname ein Argument für eine Option ist. Also, wenn „-b“ einen Dateinamen erwartet, dann geht auch das:

./foo.sh -b -hier_etwas_böses

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

Unix Samurai schrieb:

1
sh script.sh -datei_die_mit_-_beginnt

Ist das unerlaubt? Oder gibt es da einen Trick?

Üblich ist in solchen Fällen, dem Namen das Verzeichnis voranzustellen - in diesem Fall also:

1
sh script.sh ./-datei_die_mit_-_beginnt

Das funktioniert immer, weil der Name dann nicht als Option erkannt wird.

Ciao

robert

Unix_Samurai

(Themenstarter)

Anmeldungsdatum:
10. Oktober 2008

Beiträge: 661

Soll man Skripte eigentlich für sh oder für Bash schreiben? Da gibt es ja einige Differenzen, die sogar Probleme auslösen können.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

Unix Samurai schrieb:

Soll man Skripte eigentlich für sh oder für Bash schreiben? Da gibt es ja einige Differenzen, die sogar Probleme auslösen können.

Da ich in der Firma unter Linux, cygwin, Solaris und HP-UX arbeite, versuche ich die Skripte mit dem kleinsten gemeinsamen Nenner von POSIX und Solaris /bin/sh zu schreiben. Wenn ich Arrays oder andere fortgeschrittene Features brauche, nehme ich meistens die bash als Shebang und nutze die Features entsprechend. ksh ist auch noch eine gute Alternative, wenn man die olle Bource-Shell hinter sich lassen möchte und sie auf allen Systemen vorhanden ist, auf denen die Skripte laufen sollen.

Letzlich muss das jeder für sich entscheiden. Wenn Du nur auf einer Maschine unterwegs bist, dann kannst Du halt das nehmen, was da ist.

Ciao

robert

Unix_Samurai

(Themenstarter)

Anmeldungsdatum:
10. Oktober 2008

Beiträge: 661

Ich schreibe alle Skripte so, dass sie für die Community auch verwertbar sein werden. Da Du sagst, dass sh am allgemeingültigsten ist, nehme ich nun wohl dies.

Ist mit dem sh eigentlch auch #!/bin/sh gemeint? Ich hörte mal, dass sh ein Link zur Standardskriptshell sei, welches unter Ubuntu als Standard die Dash ist. Ist das so korrekt?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

Unix Samurai schrieb:

Ich schreibe alle Skripte so, dass sie für die Community auch verwertbar sein werden. Da Du sagst, dass sh am allgemeingültigsten ist, nehme ich nun wohl dies.

Leider ist sh nicht gleich sh: die Version auf Solaris kann z.B. nicht $() sondern nur die alte Form mit Backticks.

Ist mit dem sh eigentlch auch #!/bin/sh gemeint? Ich hörte mal, dass sh ein Link zur Standardskriptshell sei, welches unter Ubuntu als Standard die Dash ist. Ist das so korrekt?

Das kannst Du Dir selber beantworten.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ ls -li /bin/*sh
162972 -rwxr-xr-x 1 root root 916692 2011-05-18 11:54 /bin/bash*
162900 -rwxr-xr-x 1 root root  96188 2011-05-03 17:01 /bin/dash*
163001 lrwxrwxrwx 1 root root      4 2011-05-18 11:54 /bin/rbash -> bash*
162939 lrwxrwxrwx 1 root root      4 2011-05-03 17:01 /bin/sh -> dash*
162966 lrwxrwxrwx 1 root root      7 2011-09-01 17:59 /bin/static-sh -> busybox*
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 11.10
Release:	11.10
Codename:	oneiric

robert

Antworten |