Schrift
[thread]9654[/thread]

Regex in Shellskripten



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
renee
 2004-02-03 13:05
#96494 #96494
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hi!

Ich kenne mich überhaupt nicht mit Shellprogrammierung aus, muss aber ein bestehendes Skripte ändern...
Es musss überprüft werden, ob eine Variable ein = enthält und wenn ja, dann überschreibe die Variable mit den Zeichen, die nach dem = kommen.

Wer kann mir helfen??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Relais
 2004-02-03 13:15
#96495 #96495
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
sed -e 's/[^=]*=//'

Edit:

Mit sowas muß man vorsichtig sein:

Code: (dl )
1
2
3
4
> A="abc=def"
> A=`echo $A | sed -e 's/[^=]*=//'`
> echo $A
def


Denn wenn die Variable A etwa Zeichen enthielte, die durch das echo interpretiert werden, verändert sich ihr Inhalt eventuell.

Noch gefährlicher bei
> A=" ` rm -f /tmp/* ` "
würde der Befehl durch das echo ausgeführt.\n\n

<!--EDIT|Relais|1075807419-->
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
renee
 2004-02-03 13:21
#96496 #96496
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was mache ich hier falsch??
Code: (dl )
1
2
3
4
5
6
7
#! /bin/tcsh -f

NEWVAR=$1
NEWVAR=sed -e 's/[^=]*=//'
echo "Ausgewählter Score: $NEWVAR";

exit


Fehlermeldung:
Code: (dl )
1
2
3
4
~ 2> shell_test sc=0.55
NEWVAR=sc=0.55: Befehl nicht gefunden.
NEWVAR=sed: Befehl nicht gefunden.
NEWVAR: Undefinierte Variable.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2004-02-03 13:24
#96497 #96497
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du benutzt die tcsh. Das ist ein grosser Fehler in Shell-Skripten :-) Die tcsh ist aber Klasse im interaktiven Gebrauch.

Die Syntax von sh/ksh/bash und csh/tcsh unterscheiden sich voneinander. Um Environment-Variablen zu setzen, benutzt man

Code: (dl )
    setenv VAR value


Fuer lokale Variablen kann man set benutzen:

Code: (dl )
    set VAR = value


Aber es ist generell besser, die Shebang durch #!/bin/sh zu ersetzen.
Relais
 2004-02-03 13:25
#96498 #96498
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
1. Du verwendest die Syntax der Bourne Shell in einer C-Shell.
2. Du weist einer Variable einen ungequoteten String zu.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
renee
 2004-02-03 13:31
#96499 #96499
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
aha... ich kenn mich überhaupt nicht mit Shellprogrammierung aus... Das Problem ist, dass ich ein bestehendes Skript ändern muss...
Habe das jetzt so gemacht:
Code: (dl )
1
2
3
4
5
6
7
#! /bin/tcsh -f

set NEWVAR=$1
set NEWVAR=sed -e 's/[^=]*=//'
echo "Ausgewählter Score: $NEWVAR";

exit


Gibt aber diese Fehlermeldung:
Code: (dl )
1
2
~ 3> shell_test "sc=0.55"
set: Variable name must begin with a letter.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Relais
 2004-02-03 13:38
#96500 #96500
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Siehe meinen ersten Beitrag.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
renee
 2004-02-03 13:38
#96501 #96501
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
wie sieht dann eigentlich ne if-Abfrage aus, wenn ich wissen will, ob eine Variable mit "sc" beginnt??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2004-02-03 13:55
#96502 #96502
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set variable = sc

# Variante 1
echo $variable | grep -q ^sc
if ($? == 0) then
echo yes
else
echo no
endif

# Variante 2
switch ("$variable")
case "sc*":
echo yes
breaksw
default:
no
endsw
renee
 2004-02-04 10:41
#96503 #96503
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Danke, ihr habt mir echt geholfen. Damit konnte ich jetzt mein Problem lösen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2004-02-03 13:05.