Problem mit RA in If Verzweigung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
halimbo
Beiträge: 16
Registriert: 30.08.2013 16:05:38

Problem mit RA in If Verzweigung

Beitrag von halimbo » 31.08.2013 16:17:42

Hallo, das ist die erste Frage die ich hier im Forum stelle, hoffe mal ihr könnt mir helfen, und bin dankbar für jeden Tipp.
Also ich möchte in einem Shellscript eine Eingabe darauf überprüfen ob überhaupt etwas eingetippt wurde.

Code: Alles auswählen

{{{
read IN
if [[ "$IN == "[.]\+" ]] ; then
     blabla
fi
}}}
Was die drei geschweiften Klammern ist mir nicht ganz klar wie ihr das meintet, also wo die platziet werden sollen. Ich hab mein Wissen zur Shell-Thematik jetzt aue nem Buch bezogen, was mir an der Stelle echt Null weiterhilft. Bin jetzt auch kein totaler Noob, aber die Shellskript Syntax ist noch nicht so wirklich meins. :D

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Problem mit RA in If Verzweigung

Beitrag von Cae » 31.08.2013 16:24:55

Die geschweiften Klammern gehoeren nicht zum Code, sondern waren wahrscheinlich sinngemaess als "Code Anfang" und "Code Ende" gedacht. Oder als Sprungmarke im Vim.

Ich wuerde einfach mit test -z pruefen:

Code: Alles auswählen

#!/bin/sh

read IN
if [ -z "$in" ]; then
	echo invalid;
fi
[[ waere uebrigens unnoetige Bash-Syntax, und auch eine Regex ist unnoetig, um einen leeren String zu erkennen (uebrigens waere die dann vermutlich korrekterweise ".\+"). Wenn man -z nicht kennt, waere auch [ "$IN" = "" ] okay.

Willkommen im Forum!

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

halimbo
Beiträge: 16
Registriert: 30.08.2013 16:05:38

Re: Problem mit RA in If Verzweigung

Beitrag von halimbo » 31.08.2013 16:32:24

Wieso denn unnötige Bash Syntax, und was ist Regex?
Mit "" vergleichen funktioniert, und mit -z als testoption gehts auch. Danke.
Ab sofort stelle ich den Schmöker jetzt sehr in Frage....

halimbo
Beiträge: 16
Registriert: 30.08.2013 16:05:38

Re: Problem mit RA in If Verzweigung

Beitrag von halimbo » 31.08.2013 16:33:42

Einen bedanken Button habt ihr hier im Forum wohl nicht

halimbo
Beiträge: 16
Registriert: 30.08.2013 16:05:38

Re: Problem mit RA in If Verzweigung

Beitrag von halimbo » 31.08.2013 16:39:21

Okay sorry, habs jetzt gegoogelt... :/

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Problem mit RA in If Verzweigung

Beitrag von Cae » 31.08.2013 17:03:35

halimbo hat geschrieben:Wieso denn unnötige Bash Syntax, und was ist Regex?
Das ist eine Frage der Portabilitaet und Performance. Die Bash bringt im Gegensatz zur POSIX-konformen Shell einen Haufen extra-Features mit, u.a. [[. Wenn man so ein Skript auf einem System ohne Bash laufen laesst, wird es syntaktische oder logische Fehler geben (hoffentlich ersteres). Die Performance ist insofern relevant, als dass die Bash einfach fetter ist, die Binary ist groesser, sie braucht mehr Zeit zum Starten, die ganzen extra-Features machen den Parser komplexer, etc.. Regulaere Ausdruecke, engl. regular expressions, kurz RegEx, benoetigen wesentlich mehr Rechenzeit als einfacher String-Vergleich. Abkuerzungen wie -z und -n sollten sogar noch fixer sein.

Ausserdem solltest du ueberlegen, was du willst: Wissen, ob der String leer ist. Was du per RegEx abfragst, ist, ob er nicht aus einer einem oder mehr beliebigen Zeichen besteht. Ueberleg' mal, was da gradliniger gedacht ist. :mrgreen:
halimbo hat geschrieben:Einen bedanken Button habt ihr hier im Forum wohl nicht
Ich schreib' da einfach "Danke" und erklaere vielleicht, warum ich einen Post gut/hilfreich finde... ;)

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Problem mit RA in If Verzweigung

Beitrag von newdeb » 31.08.2013 18:17:11

Nur zur Erinnerung (Bash Manpage):
When the == and != operators are used, the string to the right of the operator is considered a pattern and matched according to the rules
described below under Pattern Matching.
"Pattern Matching" sind Konstrukte mit Wildcard-Zeichen wie beim File Globbing (ls *.[ch]), also keine RegEx-Vergleiche. Letzteres geht in der Bash mit dem Operator "=~".

halimbo
Beiträge: 16
Registriert: 30.08.2013 16:05:38

Re: Problem mit RA in If Verzweigung

Beitrag von halimbo » 01.09.2013 01:52:12

Danke für die äußerst aufklärenden Antworten ;)
Da bin ich aber überrascht jetzt, davon stand in dem Schmöker namens "Linux. Das umfassende Handbuch" nämlich nichts. Hat anscheinend echt einige Schwächen, man bemerkt oft auf logische Fehler und Unklarheiten.

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Problem mit RA in If Verzweigung

Beitrag von Phineas » 01.09.2013 06:28:19

Wäre das Handbuch wirklich umfassend, wäre es wohl mehrere Meter dick. Ich kann mir nicht vorstellen dass es ein Buch gibt, das dem Anspruch "Linux umfassend" gerecht wird.

-z kann man in der Bash auch einfach so formulieren:

Code: Alles auswählen

[ "$in" ]

wanne
Moderator
Beiträge: 7465
Registriert: 24.05.2010 12:39:42

Re: Problem mit RA in If Verzweigung

Beitrag von wanne » 01.09.2013 06:58:39

Das dürfte überall funktionieren.
rot: Moderator wanne spricht, default: User wanne spricht.

Antworten