Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
dmant
Beiträge: 251
Registriert: 09.10.2017 10:28:29

Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von dmant » 09.01.2018 11:11:01

Hallo,

wie schon im Titel gesagt habe ich mehrere Anliegen zu verschiedenen Themen, ich fange einfach mal an.

OpenVPN Siehe: viewtopic.php?f=32&t=168198
tc Siehe: viewtopic.php?f=32&t=168199
OpenSSL Siehe: viewtopic.php?f=34&t=168200


bash scripting

Hier habe ich etliche Fragen. Wobei mich erstmal nur interessiert wie ich ein SCP mittels eines Script ausführe. Also z.b. sowas

Code: Alles auswählen

#!/bin/sh

URL="foorbar.com"
USERNAME="user"
PASSWORT="pass"

scp $USERNAME@$URL:/home/$USERNAME/foodatei.tar /root/;
mv /root/foodatei.tar /foo/bar/;
.....
.....
.....
Das script soll jetzt automatisch die Datei per SCP runterladen. Ohne Eingabe. Also wie übergibt man dort z.b. das Passwort? Oder wie löst man soetwas am besten? Wie könnte ich dem script sagen das es automatisch einen crontab Eintrag erstellt?

Danke euch.
Zuletzt geändert von Meillo am 09.01.2018 11:26:36, insgesamt 1-mal geändert.
Grund: Ausgelagerte Themen hier entfernt und verlinkt

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting)

Beitrag von Meillo » 09.01.2018 11:13:03

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
wie schon im Titel gesagt habe ich mehrere Anliegen zu verschiedenen Themen, ich fange einfach mal an.
Vielen Fragen -> viele Threads. Bitte mach fuer jedes der Themen ein eigenes Thema auf, sonst gibt's ein zu grosses Durcheinander.
Use ed once in a while!

owl102

Re: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting)

Beitrag von owl102 » 09.01.2018 11:18:12

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
Das script soll jetzt automatisch die Datei per SCP runterladen. Ohne Eingabe. Also wie übergibt man dort z.b. das Passwort?
http://mywiki.wooledge.org/BashFAQ/069

dmant
Beiträge: 251
Registriert: 09.10.2017 10:28:29

Re: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting)

Beitrag von dmant » 09.01.2018 11:26:20

Meillo hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:13:03
dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
wie schon im Titel gesagt habe ich mehrere Anliegen zu verschiedenen Themen, ich fange einfach mal an.
Vielen Fragen -> viele Threads. Bitte mach fuer jedes der Themen ein eigenes Thema auf, sonst gibt's ein zu grosses Durcheinander.
Erledigt :)
owl102 hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:18:12
dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
Das script soll jetzt automatisch die Datei per SCP runterladen. Ohne Eingabe. Also wie übergibt man dort z.b. das Passwort?
http://mywiki.wooledge.org/BashFAQ/069
Ja das hätte aber eine weitere Datei zur Folge.

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting)

Beitrag von Meillo » 09.01.2018 11:29:08

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:26:20
Meillo hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:13:03
dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
wie schon im Titel gesagt habe ich mehrere Anliegen zu verschiedenen Themen, ich fange einfach mal an.
Vielen Fragen -> viele Threads. Bitte mach fuer jedes der Themen ein eigenes Thema auf, sonst gibt's ein zu grosses Durcheinander.
Erledigt :)
Danke. Ich hab diesen Thread hier zum Bash-Scripting-Thread umgebaut (weil schon owl102s Antwort da war) und dein Bash-Scripting-Thema entfernt. Jetzt sollten wir inhaltlich diskutieren koennen. :-)
Use ed once in a while!

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von r4pt0r » 09.01.2018 15:29:30

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
Also wie übergibt man dort z.b. das Passwort? Oder wie löst man soetwas am besten?

Passwörter im Klartext in scripten anzugeben ist grundsätzlich eine schlechte Idee - benutze ssh-keys für die Authentifizierung.
Zu testzwecken kann ggf Debiansshpass verwendet werden.


Und noch eine allgemeine Anmerkung: für scripte sollte man die bourne shell verwenden, nicht bash! Die default shell für cron auf sämtlichen linux- und UNIX-systemen ist sh und diese ist in POSIX standardisiert. bash ist oft sogar nichtmal zwischen verschiedenen Linux-varianten 100% kompatibel, portabilität ist somit nicht gegeben.

owl102

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von owl102 » 09.01.2018 16:51:35

r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 15:29:30
bash ist oft sogar nichtmal zwischen verschiedenen Linux-varianten 100% kompatibel, portabilität ist somit nicht gegeben.
Beispiel?

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von r4pt0r » 09.01.2018 17:39:16

debian verlinkt bash auf dash das nicht 100% bash-kompatibel ist; redhat und oracle liefern z.t. modifizierte bash-varianten aus. Häufigstes Problem z.b. mit bash/dash sind C-style 'for' Schleifen für die dash einen anderen syntax verwendet.
Das Verhalten bei globbing und quotes (nested!) ist auch oft nicht wirklich einheitlich und teilweise weichen sogar die builtin commands und/oder deren optionen ab. Nimmt man auch noch bash für windows oder cygwin dazu wirds richtig gruselig (gut, da funktioniert dann sowieso nichts mehr wirklich brauchbar...).


Zudem - und das ist eigentlich noch wichtiger - ist bash nicht zwingend auf allen systemen vorhanden, sh aber de facto auf allen UNIX, BSD und Linux installationen. Wie schon gesagt dank POSIX auch überall mit dem selben subset an funktionen und identischem syntax (zumindest für alles was in POSIX definiert ist).

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Meillo » 09.01.2018 17:41:21

owl102 hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 16:51:35
r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 15:29:30
bash ist oft sogar nichtmal zwischen verschiedenen Linux-varianten 100% kompatibel, portabilität ist somit nicht gegeben.
Beispiel?
;-)

Die Portabilitaet innerhalb der Obermenge der Bourne-Shells ist ein groesseres Problem als wenn man sie nur innerhalb der Untermenge der Bashes haben will. POSIX ist zwar eine coole Sache, aber nicht alle /bin/sh implementieren es korrekt und vollstaendig.

Im gegebenen Fall wird man sich ueber nichts von all dem Gedanken machen muessen. (Ueber das Passwortthema sollte man sich viel eher Gedanken machen.)

... nichtsdestotrotz wuerde mich ein Beispiel fuer Bash-Inkompatiblitaeten auch interessieren.



EDIT (hab zu lang gebraucht):
r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 17:39:16
debian verlinkt bash auf dash
Das tut Debian? 8O Ich dachte bloss, dass man nicht weiss ob eine Bash oder eine Dash hinter /bin/sh steckt.

redhat und oracle liefern z.t. modifizierte bash-varianten aus.
Mit abweichender Syntax und Semantik? Oder nur andere Standard-Optionen?
Häufigstes Problem z.b. mit bash/dash sind C-style 'for' Schleifen für die dash einen anderen syntax verwendet.
Das Verhalten bei globbing und quotes (nested!) ist auch oft nicht wirklich einheitlich und teilweise weichen sogar die builtin commands und/oder deren optionen ab.
Um das klar zu kriegen: Geht es da um Unterschiede zwischen Bash-Versionen oder um Unterschiede zwischen Bash und Dash. Die Schleifen betreffen doch hoechstens zweiteres ... und da diese Art von Schleifen nicht standardisiert sind, ist es klar, dass da die Shells unterschiedliche Umsetzungen haben koennen.

Nimmt man auch noch bash für windows oder cygwin dazu wirds richtig gruselig (gut, da funktioniert dann sowieso nichts mehr wirklich brauchbar...).
Aber das /bin/bash im Shebang funktioniert ja schon bei einem BSD nicht mehr ... Wer denkt da gar an Windows? ;-)
Use ed once in a while!

dmant
Beiträge: 251
Registriert: 09.10.2017 10:28:29

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von dmant » 09.01.2018 18:15:17

r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 15:29:30
dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
Also wie übergibt man dort z.b. das Passwort? Oder wie löst man soetwas am besten?
Passwörter im Klartext in scripten anzugeben ist grundsätzlich eine schlechte Idee - benutze ssh-keys für die Authentifizierung.
Zu testzwecken kann ggf Debiansshpass verwendet werden.
...
Kann ich das gleiche Key-File denn auf mehreren Servern verwenden? Also das script würde ohnehin nur auf meinen Systemen die ziemlich gut gesichert sind zum Einsatz kommen. Also jetzt nichts was mehrere zu lesen bekommen. Eventuell löse ich das auch über ein wget als alternative.

owl102

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von owl102 » 09.01.2018 19:14:07

r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 17:39:16
debian verlinkt bash auf dash
Das kann ich nicht bestätigen. /bin/sh ist ein Link auf die dash, /bin/bash hingegen nicht. Außerdem meldet die bash (auf Debian 8):

Code: Alles auswählen

#declare -p BASH_VERSION
declare -- BASH_VERSION="4.3.30(1)-release"
#declare -p BASH_VERSINFO
declare -ar BASH_VERSINFO='([0]="4" [1]="3" [2]="30" [3]="1" [4]="release" [5]="i586-pc-linux-gnu")'
Das ist also definitiv eine bash und keine dash.
redhat und oracle liefern z.t. modifizierte bash-varianten aus.
Da sind mir nur rückportierte Sicherheitsfixes (Backporting) bekannt.
Das Verhalten bei globbing und quotes (nested!) ist auch oft nicht wirklich einheitlich
Beispiel?
und teilweise weichen sogar die builtin commands und/oder deren optionen ab.
Beispiel?
Wie schon gesagt dank POSIX auch überall mit dem selben subset an funktionen und identischem syntax (zumindest für alles was in POSIX definiert ist).
Die Frage ist, ob man diese Kompatibilität braucht. Ich persönlich würde die Frage POSIX oder bash immer individuell beantworten.

Hinzu kommt, das mit POSIX auch nicht alles eitel Sonnenschein ist. POSIX erfordert eine Menge Wissen und Erfahrung, denn ein Script, welches "#!/bin/sh" vorgibt und unter RHEL entwickelt wurde läuft nicht automatisch auch unter Debian. Man bekommt eben eine Shell, die POSIX-kompatibel ist, aber keine Shell, die nur POSIX kann.

Code: Alles auswählen

    #!/bin/sh
    linecount=0

    printf '%s\n' foo bar |
    while IFS= read -r line
    do
        linecount=$((linecount + 1))
    done

    echo "total number of lines: $linecount"
Was ist das Ergebnis, 0 oder 2? POSIX ist hier nicht eindeutig spezifiziert und so liefern manche POSIX-kompatiblen Shells das Ergebnis 0 und manche 2. Siehe auch: http://mywiki.wooledge.org/BashFAQ/024

dmant
Beiträge: 251
Registriert: 09.10.2017 10:28:29

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von dmant » 09.01.2018 20:02:40

Ich habe mir jetzt was kleines geschrieben.

https://nopaste.linux-dev.org/?1171834

Wie kriege ich da noch diese "optionen" mit Strg+c rein? Also das z.b. wenn man Strg+c drückt der openvpn client noch vorher beendet wird bevor das script sich beendet?

Starte ich das einfach und schicke es in den Hintergrund oder doch besser in einem screen laufen lassen? Also lieber wäre mir wenn das immer läuft, also ab system start. Was das script macht denke ich könnt ihr sehen.

Es läuft so zumindestens erstmal. Wie würdet ihr das machen? Was würdet ihr ändern? Bitte nachsicht, bin neuling.

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Meillo » 09.01.2018 21:56:41

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 20:02:40
Ich habe mir jetzt was kleines geschrieben.

https://nopaste.linux-dev.org/?1171834

[...]

Es läuft so zumindestens erstmal. Wie würdet ihr das machen? Was würdet ihr ändern? Bitte nachsicht, bin neuling.
Du hast oft das Schema:

Code: Alles auswählen

some command | line ...
if [ $? -eq 0 ]
then
Das kannst du so ersetzen:

Code: Alles auswählen

if some command | line ...
then
Statt

Code: Alles auswählen

[ $? -eq 0 ]
kannst du also auch einfach den Befehl selbst an diese Stelle schreiben.


Dann solltest du Variablenexpansionen (also wenn z.B. $foo) dran steht grundsaetzlich in doppelte Anfuehrungszeichen setzten: "$foo". Es gibt ganz wenige Ausnahmen wo das falsch ist. In deinem Fall sind die Werte so, dass es nicht unbedingt sein muss, aber es ist sehr viel robuster wenn du es machst.


Statt dem grossen If-Block am Ende wuerde ich eher die Bedingung negieren und nur ein continue in den Block schreiben. Aber das ist ein bisschen persoenliche Praeferenz.


Variablennamen darf man uebrigens gerne klein schreiben. ;-)


Deine Einrueckungstiefe stimmt nicht ueberall.


Das war jetzt das was mir auf die Schnelle aufgefallen ist. Natuerlich koennte man anfangen, die Tests, ob bestimmte Dienste laufen in Shellfunktionen auszulagern. Damit das alles ein bisschen uebersichtlicher wird. Auch koennte man die boolschen Zuweisungen in den If-else ohne If mit direkten Zuweisungen umsetzen, z.B.:

Code: Alles auswählen

# statt
nmap -p $VPNPORT $SERVER | grep -q "openvpn";
if [ $? -eq 0 ]
then
    VPNSTATUS=1; # VPN Server ist Online.
else
    VPNSTATUS=0; # VPN Server ist Offline.
fi

# geht's auch so
nmap -p $VPNPORT $SERVER | grep -q "openvpn";
VPNSTATUS=$?  # wenn du danach nur auf 0 oder nicht-0 testest
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Meillo » 09.01.2018 22:10:11

owl102 hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 19:14:07
Hinzu kommt, das mit POSIX auch nicht alles eitel Sonnenschein ist. POSIX erfordert eine Menge Wissen und Erfahrung, denn ein Script, welches "#!/bin/sh" vorgibt und unter RHEL entwickelt wurde läuft nicht automatisch auch unter Debian. Man bekommt eben eine Shell, die POSIX-kompatibel ist, aber keine Shell, die nur POSIX kann.
[...]
Was ist das Ergebnis, 0 oder 2? POSIX ist hier nicht eindeutig spezifiziert und so liefern manche POSIX-kompatiblen Shells das Ergebnis 0 und manche 2. Siehe auch: http://mywiki.wooledge.org/BashFAQ/024
Man muss vor allem wissen, dass POSIX keine Soll-Spezifikation ist, sondern in seinem Charakter die Dokumentation des groessten gemeinsamen Nenners der verschiedenen Unix-Varianten. Nur an bestimmten, wohl ueberlegten Stellen wurde inkompatibles oder gar neues Verhalten spezifiziert. Folglich ist es nur natuerlich, dass POSIX eine Menge unspezifiziert laesst ... naemlich typischerweise da wo es zwei gleichwertige inkompatible Implementierungen gab. Desweiteren muss man beachten, dass sich POSIX veraendert. Man muss genau genommen also auch noch angeben welche Version von POSIX implementiert wird (und wenn die Entwickler (wie z.B. das GNU-Projekt) behaupten, dass sie POSIX-kompatibel waeren, dann heisst das noch lange nicht, dass das auch tatsaechlich der Fall ist. Oft ist nur eine populaere Teilmenge des Standards implementiert.

Also ja, man muss eine ganze Menge wissen, wenn man Portabilitaet bieten will.
Use ed once in a while!

Benutzeravatar
Datenteiler
Beiträge: 84
Registriert: 12.10.2008 21:01:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Hannover
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Datenteiler » 09.01.2018 22:28:43

Meillo hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 22:10:11
Also ja, man muss eine ganze Menge wissen, wenn man Portabilitaet bieten will.
Inwieweit ist Portabilität bei Shell-Skripten eigentlich ein Thema? Ich hätte jetzt gedacht, dass Shell-Skripte eher was für die eigene kleine Administratorenwelt sind, also den eigenen Serverpark, den man betreut, oder die eigenen Clients, also Umgebungen, die man mehr oder weniger gut kennt. Wenn es um Portabilität geht, wäre eine andere Skriptsprache dann eher das Werkzeug der Wahl, so was wie z.B. Python, Perl, oder auch Ruby etc.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von breakthewall » 09.01.2018 23:04:37

r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 15:29:30
Passwörter im Klartext in scripten anzugeben ist grundsätzlich eine schlechte Idee - benutze ssh-keys für die Authentifizierung.
Zu testzwecken kann ggf Debiansshpass verwendet werden.
Man kann Passwörter durchaus sicher in Shellscripten übergeben. Nur sollte man diese logischerweise nicht im Klartext in das Shellscript schreiben.

Beispiel:
viewtopic.php?f=37&t=165374&p=1133574&hilit=#p1133574

Somit könnte das so aussehen:

Code: Alles auswählen

#!/bin/bash

PASS="$(< /root/ssh-password)"
sshpass -f <(echo "$PASS") ssh user@host
Somit wäre das Passwort nur für Root lesbar, und ab Scriptstart nicht einfach so auszulesen.
Man müsste hier schon ab Scriptstart mit gdb oder strace loggen, und wenn das möglich ist für ein Fremdprogramm, dann stellt das die Systemsicherheit schon prinzipiell in Frage. Da braucht man dann auch nicht mehr mit Public-Keys arbeiten, die sind dann ebenfalls kompromittiert.
r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 15:29:30
Und noch eine allgemeine Anmerkung: für scripte sollte man die bourne shell verwenden, nicht bash! Die default shell für cron auf sämtlichen linux- und UNIX-systemen ist sh und diese ist in POSIX standardisiert. bash ist oft sogar nichtmal zwischen verschiedenen Linux-varianten 100% kompatibel, portabilität ist somit nicht gegeben.
Nur weil in einer Crontab aus historischen Gründen /bin/sh steht, ist das nicht die Default-Shell, sondern nur jene Shell die historisch noch für Systemscripte genutzt wird. Auf so gut wie jeder modernen Linux-Distribution ist die GNU/Bash die Standard-Usershell. Ich hatte noch keine Distribution, in der irgendein Bashscript nicht anstandslos lief, ausser unter BSD, macOS und weiterem. Genau genommen nutzt einem diese vielfach angepriesene Kompatibilität garnichts, wenn man nur eine einheitliche Shell hat, aber die Userspace-Programme sich teils erheblich unterscheiden. Denn die GNU/Coreutils mal als Beispiel genommen, sind nicht automatisch mit BSD, macOS und Co. kompatibel, da hier jede Plattform ihre Eigenheiten hat. Von daher ist das eine unsägliche Arbeit, ein Shellscript kompatibel zu allen Plattformen zu machen, wo man besser Python nimmt oder direkt C, C++ und Vergleichbares. Und persönlich muss ich dazu sagen, dass der Posix-Standard verdammt alt ist, und heutige Belange garnicht auf dem Schirm hatte. Genau darum existieren doch erst Shells wie Zsh oder die Bash, um modernen Ansprüchen gerecht zu werden.

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von tobo » 09.01.2018 23:56:32

breakthewall hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 23:04:37
Nur weil in einer Crontab aus historischen Gründen /bin/sh steht, ist das nicht die Default-Shell, sondern nur jene Shell die historisch noch für Systemscripte genutzt wird. Auf so gut wie jeder modernen Linux-Distribution ist die GNU/Bash die Standard-Usershell.
Nein, weder stimmt das für Debian noch allgemein. Das, was unter sh als Link eingetragen ist, das ist die default shell. Und das ist auch nicht historisch, sondern "schon immer so"!? Der Übergang von sh->bash zu sh->dash ist allerdings erst seit Squeeze. Vermutlich ist man der ganzen bashism leid geworden (siehe auch Slackware Init und Paketverwaltung)!?
man sh hat geschrieben:dash is the standard command interpreter for the system.
Nicht zu verwechseln mit dem, was man als interaktive Shell verwendet (bash, mksh, zsh, etc.).

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von breakthewall » 10.01.2018 02:54:12

tobo hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 23:56:32
Nein, weder stimmt das für Debian noch allgemein. Das, was unter sh als Link eingetragen ist, das ist die default shell. Und das ist auch nicht historisch, sondern "schon immer so"!? Der Übergang von sh->bash zu sh->dash ist allerdings erst seit Squeeze. Vermutlich ist man der ganzen bashism leid geworden (siehe auch Slackware Init und Paketverwaltung)!?
man sh hat geschrieben:dash is the standard command interpreter for the system.
Nicht zu verwechseln mit dem, was man als interaktive Shell verwendet (bash, mksh, zsh, etc.).
Wenn ich deinen Post so lese, dann bestätigt sich damit eigentlich mein Post. Denn ich sagte, dass /bin/sh historisch (und somit noch immer/schon immer), für Systemscripte genutzt wird. Es ging auch nicht darum was unmittelbar mit /bin/sh verlinkt ist. Die Manpage sagt ebenfalls, diese Shell sei die Systemshell. Im Bezug auf die Bash sprach ich auch nur von einer Usershell, also jener Shell mit der ein Nutzer via Terminal unmittelbar Kontakt hat, und mit der regulär gearbeitet wird. Auch können beide Shells je nach Umstand interaktiv arbeiten. Missverständnis?

owl102

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von owl102 » 10.01.2018 10:40:21

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 20:02:40
Ich habe mir jetzt was kleines geschrieben.

https://nopaste.linux-dev.org/?1171834
Was mir neben den Sachen, die Meilo schon geschrieben hat, aufgefallen ist:

Alle ; in dem Script sind bis auf eine Ausnahme überflüssig, ich würde sie entfernen. (Die Ausnahme: "while true; do")

Außerdem verwendest du manchmal bei "test" die Syntax "[ x = y ]" und manchmal "[ x == y ]". Ich würde es einheitlich machen, in diesem Falle immer "[ x = y ]", denn das "==" kann POSIX nicht und in der bash würde man das am besten wieder anders schreiben, wenn man denn schon Bash-Features verwenden möchte, z.B. nicht

Code: Alles auswählen

if [ $SERVERSTATUS == 1 ] && [ $VPNSTATUS == 1 ]
sondern

Code: Alles auswählen

if (( SERVERSTATUS == 1 && VPNSTATUS == 1 ))
Alternativ könnte man solche Flags auch nicht auf 0 oder 1, sondern stattdessen auf "false" oder "true" setzen. Dann könnte man sie so abfragen:

Code: Alles auswählen

if $SERVERSTATUS && $VPNSTATUS
Zuletzt geändert von owl102 am 10.01.2018 18:45:43, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Meillo » 10.01.2018 18:34:19

owl102 hat geschrieben: ↑ zum Beitrag ↑
10.01.2018 10:40:21
Alternativ könnte man solche Flags auch nicht auf 0 oder 1, sondern stattdessen auf "false" oder "true" setzen. Dann könnte man sie so abfragen:

Code: Alles auswählen

if $SERVERSTATUS && $VPNSTATUS
Abgefahrene Sache! Werd' ich mir merken. :THX:
Use ed once in a while!

TomL

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von TomL » 10.01.2018 19:05:49

Meillo hat geschrieben: ↑ zum Beitrag ↑
10.01.2018 18:34:19
owl102 hat geschrieben: ↑ zum Beitrag ↑
10.01.2018 10:40:21
Alternativ könnte man solche Flags auch nicht auf 0 oder 1, sondern stattdessen auf "false" oder "true" setzen. Dann könnte man sie so abfragen:

Code: Alles auswählen

if $SERVERSTATUS && $VPNSTATUS
Abgefahrene Sache! Werd' ich mir merken.
Ja, ist schön kurz... aber enthält leider auch Potential für Lese-Flüchtigkeitsfehler, was mich mal schier zur Verzweiflung gebracht hat. Und erst mit kdiff beim Vergleich mit der Vorversion bin ich dann drüber gestolpert. Ich hab zwar gelesen, was da stand, aber dummerweise verstanden, was ich eigentlich da erwartet habe... und hab dann über mich selber gedacht: :facepalm:

Code: Alles auswählen

if ! $SERVERSTATUS && $VPNSTATUS
Deswegen schreib ich es heute wieder in Langform.......

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von tobo » 11.01.2018 00:19:01

owl102 hat geschrieben:sondern

Code: Alles auswählen

if (( SERVERSTATUS == 1 && VPNSTATUS == 1 ))
Wobei man mit dem arithmetischen (()) aber schon ein bisschen vorsichtig hantieren sollte, bezüglich der Unterschiede zum Exit-Status:

Code: Alles auswählen

$ true;if (($?));then echo TRUE;else echo FALSE;fi
FALSE
$ false;if (($?));then echo TRUE;else echo FALSE;fi
TRUE
TomL hat geschrieben:

Code: Alles auswählen

if ! $SERVERSTATUS && $VPNSTATUS
Also ich würde das NOT hier immer klammern, selbst wenn es nur für den ersten Operanden bestimmt ist. Mit Klammer ist es direkt lesbar/verständlich und ohne Klammer muss man mindestens mal den Gedankengang der Operatorpriorität mehr machen.
breakthewall hat geschrieben:Missverständnis?
Nein, ich habe mich nur vergleichsweise bescheuert ausgedrückt! Aber sowas artet dann eh in eine Grundsatzdiskussion - da habe ich jetzt wenig Nerv für...

Antworten