Moin, mit bash-Scripten steh ich auf Kriegsfuß. Irgendwie werden wir keine Freunde. Es geht um ein Script, das abhängig davon ob ein Verzeichnis gemountet ist oder nicht, entsprechende Aktionen macht. Frage 1: --snip-- $(mount | grep backup) CMDO="mount | grep backup" $CMDO --snap-- wo liegen die Unterschiede zwischen Zeile 1 und 3? Während 1 das tut was ich erwarte, schlägt 3 fehl. Die Ausgabe entspricht "mount -h", also der Hilfe. Frage 2: --snip-- PROBE=$(mount | grep backup) if { test -z $PROBE } then { echo "Hello" } else { echo "World" } --snap-- Ich erhalte die Meldung "Syntax Fehler: Unerwartetes Dateiende." in der letzten Zeile. Irgendwas fehlt, Aber was? Gruß Joachim -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 08.01.2018 um 12:12 schrieb Joachim H.:
Moin,
mit bash-Scripten steh ich auf Kriegsfuß.
Irgendwie werden wir keine Freunde.
Es geht um ein Script, das abhängig davon ob ein Verzeichnis gemountet ist oder nicht, entsprechende Aktionen macht.
Frage 1:
--snip-- $(mount | grep backup)
CMDO="mount | grep backup" $CMDO --snap--
wo liegen die Unterschiede zwischen Zeile 1 und 3? Während 1 das tut was ich erwarte, schlägt 3 fehl. Die Ausgabe entspricht "mount -h", also der Hilfe.
Hallo Joachim, in deinem zweiten Fall erhält das Kommando "mount" alles dahinter als Argumente - sprich, das Pipe-Zeichen wird von der Shell nicht dazu verwendet, eine Pipe einzurichten. Du müßtest stattdessen ein eval davor setzen, dann geht es ...
Frage 2:
--snip-- PROBE=$(mount | grep backup)
if { test -z $PROBE } then { echo "Hello" } else { echo "World" }
--snap--
Ich erhalte die Meldung "Syntax Fehler: Unerwartetes Dateiende." in der letzten Zeile.
Irgendwas fehlt, Aber was?
Gruß
Joachim
Es geht so: if test -z "$PROBE" then echo "Hello" else echo "World" fi -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 08.01.2018 um 12:34 schrieb Martin Deppe:
Es geht so: if test -z "$PROBE" then echo "Hello" else echo "World" fi if [[ -z "${PROBE}" ]]; then echo "Hello" else echo "World" fi
-- Christian ------------------------------------------------------------ https://join.worldcommunitygrid.org?recruiterId=177038 ------------------------------------------------------------ http://www.sc24.de - Sportbekleidung ------------------------------------------------------------ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Danke für die Berichtigung. Mein Problem an der Sache ist, wie das hier zur man-Page passt. --Auszug-- EXAMPLES A simple conditional: if {$vbl == 1} { puts "vbl is one" } With an else-clause: if {$vbl == 1} { puts "vbl is one" } else { puts "vbl is not one" } With an elseif-clause too: if {$vbl == 1} { puts "vbl is one" } elseif {$vbl == 2} { puts "vbl is two" } else { puts "vbl is not one or two" } Remember, expressions can be multi-line, but in that case it can be a good idea to use the optional then keyword for clarity: if { $vbl == 1 || $vbl == 2 || $vbl == 3 } then { puts "vbl is one, two or three" } --Auszug Ende-- In der man-Page taucht das fi nie auf. Joachim Am 08.01.2018 um 14:09 schrieb Christian
Am 08.01.2018 um 12:34 schrieb Martin Deppe:
Es geht so: if test -z "$PROBE" then echo "Hello" else echo "World" fi if [[ -z "${PROBE}" ]]; then echo "Hello" else echo "World" fi
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Joachim H. [08.01.2018 15:08]:
Danke für die Berichtigung.
Mein Problem an der Sache ist, wie das hier zur man-Page passt.
Welche man-page? Zu bash? Welche bash-Version? In meiner bash-manpage steht z. B. if list; then list; [ elif list; then list; ] ... [ else list; ] fi mit geschweiften Klammern habe ich noch kein if in der Bash gesehen. Und das "elseif" in Deinem Beispiel deutet nicht auf Bash hin, da heißt es elif. Werner --
Hallo Werner, ich hatte nur "man if" eingegeben. War dann wohl die tcl-Version. Sorry für die Verwirrung Joachim Am 08.01.2018 um 15:33 schrieb Werner Flamme:
Joachim H. [08.01.2018 15:08]:
Danke für die Berichtigung.
Mein Problem an der Sache ist, wie das hier zur man-Page passt.
Welche man-page? Zu bash? Welche bash-Version?
In meiner bash-manpage steht z. B.
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
mit geschweiften Klammern habe ich noch kein if in der Bash gesehen.
Und das "elseif" in Deinem Beispiel deutet nicht auf Bash hin, da heißt es elif.
Werner
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Mon, 08 Jan 2018, Joachim H. schrieb:
ich hatte nur "man if" eingegeben.
Für die bash gibt's 'man bash', 'man bashbuiltins' und den eingebauten Befehl 'help'. ==== man bash ==== SHELL GRAMMAR [..] Pipelines A pipeline is a sequence of one or more commands separated by one of the control operators | or |&. [..] The return status of a pipeline is the exit status of the last command, unless the pipefail option is enabled. [..] Lists [..] A list is a sequence of one or more pipelines separated by one of the operators ;, &, &&, or ||, and optionally terminated by one of ;, &, or <newline>. [..] If a command is terminated by the control operator &, the shell exe- cutes the command in the background in a subshell. The shell does not wait for the command to finish, and the return status is 0. Commands separated by a ; are executed sequentially; the shell waits for each command to terminate in turn. The return status is the exit status of the last command executed. [..] status. The return status of AND and OR lists is the exit status of the last command executed in the list. [..] Compound Commands [..] if list; then list; [ elif list; then list; ] ... [ else list; ] fi The if list is executed. If its exit status is zero, the then list is executed. Otherwise, each elif list is executed in turn, and if its exit status is zero, the corresponding then list is executed and the command completes. Otherwise, the else list is executed, if present. The exit status is the exit sta- tus of the last command executed, or zero if no condition tested true. [..] ==== ==== help if ==== help if if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi Execute commands based on conditional. [..] ==== Man bemerke: Es heißt und ist "if list ; then ... ; fi". Von "test", "[", "[[" oder sonstwas steht da nix. "list" ist eine "Liste" aus ein oder mehreren (eingebauten) Kommandos. Z.B. if grep -q '^flags[[:space:]]*:.* sse2 ' /proc/cpuinfo; then echo "your cpu supports SSE2" fi Entscheidend ist hier _NUR_ der Exitstatus der Liste, im einfachen Falle wie hier also der des grep. Ansonsten s.o. zitiertes. Siehe auch PIPESTATUS. Irgendwelches Gehampel mit 'test'/'[' ist überflüssig. Ebenso '[['. Das ist wie als würde man sowas if if grep -q bla irnkwo ; then true ; else false; fi; then echo "TRUE"; else echo "FALSE"; fi verwenden. Bei Kombinationen von '&&' und '||' ist es "kompliziert"; da sollte man if .. fi oder zumindest '{ .. }' ("group command") verwenden. Die Präzendenzen sind nicht unbedingt so wie man es erwartet.
War dann wohl die tcl-Version.
Jep. Und nicht zu verwechseln mit den ganzen anderen "if"'s in C, C++, perl, python, csh, lua, TeX[1], PostScript, PDF, make, Java, ECMAScript, Lua, ruby... (Runde?) Klammern für die Bedingung? Geschweifte um den then-Block? Oder reicht "einrücken"? usw... -dnh [1] ja, TeX ist eine komplette Programmiersprache, genau wie PS. Nur für anderes als das vorgesehene eher unhandlich. Aber es gibt z.B. einen http-Server der in postscript implementiert ist! Und "99-Bottles" sowieso. -- Assume everyone is out to get you, and you're wearing a lime yellow suit with strobe lights and bullseyes and a big flaming red arrow on top of your head, pointing down. Ride accordingly. -- Michel Buijsman on riding a bike -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Joachim H. [08.01.2018 12:12]:
Moin,
mit bash-Scripten steh ich auf Kriegsfuß.
Irgendwie werden wir keine Freunde.
Mir hilft bei Fragen meist <http://tldp.org/LDP/abs/html/>. Werner --
Am 08.01.2018 um 12:12 schrieb Joachim H.:
Moin,
mit bash-Scripten steh ich auf Kriegsfuß.
Irgendwie werden wir keine Freunde.
Es geht um ein Script, das abhängig davon ob ein Verzeichnis gemountet ist oder nicht, entsprechende Aktionen macht.
Frage 1:
--snip-- $(mount | grep backup)
CMDO="mount | grep backup" $CMDO --snap--
wo liegen die Unterschiede zwischen Zeile 1 und 3? Während 1 das tut was ich erwarte, schlägt 3 fehl. Die Ausgabe entspricht "mount -h", also der Hilfe.
Frage 2:
--snip-- PROBE=$(mount | grep backup)
if { test -z $PROBE } then { echo "Hello" } else { echo "World" }
--snap--
Ich erhalte die Meldung "Syntax Fehler: Unerwartetes Dateiende." in der letzten Zeile.
Irgendwas fehlt, Aber was?
Gruß
Joachim
Tja, aller Anfang ist schwer ;.) In deinem Fall geht das so #!/bin/bash if mountpoint -q /backup; then echo "gemounted" else echo "nicht gemounted" fi -------------------------- mount | grep ist IMO Murks Gruß Manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Mon, 08 Jan 2018, Manfred Kreisl schrieb:
In deinem Fall geht das so
#!/bin/bash
if mountpoint -q /backup; then echo "gemounted"
Ich verwende (in meiner exakt bekannten Umgebung) meist: if grep -q ' /backup ' /proc/mounts oder meinetwegen auch: awk '$2 == "/backup" { exit 0; } END{ exit 1;}' /proc/mounts aber eher noch if test -e /backup/irnkwas_das_nur_da_is_wenn_korrekt_gemounted HTH, -dnh --
http://www.google.com/tisp/press.html Didn't AOL do something like this already, about 5,000 days or so ago? -- Steed, about googles "Toilet Internet Service Provider" -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (6)
-
Christian
-
David Haller
-
Joachim H.
-
Manfred Kreisl
-
Martin Deppe
-
Werner Flamme