Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

24.02.2008, 20:20

[gelöst] sh wörter verdrehen

ich benötige ein sh womit man wörter beliebig verdrehen kann.
ich habe einige befehle:

${wort:n-1:1} variable wort, buchstabe nummer n
${#wort} länge wort in variable wort
$RANDOM

buchstaben kann man per expr $RANDOM % ${#wort} in array speichern

leider habe ich es mehrmals versucht irgwas zusammenzubasteln doch es funktionierte nicht... :?

ich wäre sehr dankbar falls mir jemand dieses : machen könnte :chinese:

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

2

24.02.2008, 22:07

RE: sh wörter verdrehen

sollen die buchstaben zufällig durcheinandergewürfelt werden?
poste doch mal ein paar deiner entwürfe.
hat die aufgabe einen sinnvollen und praktischen hintergrund oder ist das eine hausaufgabe?
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

3

24.02.2008, 22:23

also die buchstaben sollen zufällig wiedergegeben werden..es ist eine hausaufgabe

ps
die entwürfe hab ich jetzt nicht parat,,kann sie aber morgen reinposten

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

4

25.02.2008, 00:05

ok, dann poste mal.
tipps wirst du bekommen, aber lösen musst du deine hausaufgabe selbst, denn das ist der sinn einer hausaufgabe.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

5

11.03.2008, 18:20

also der anfang ist...

#!/bin/bash
1 read $wort
2 $n=${#wort}
3 y=0
4 x=0
5 while test $y -le $n; do
6 array[$y]=${wort:$x:1]}
7 x=$[$x+1]
8 y=$[$y+1]
9 done
das is erstmal bis zur ersten schleife

das erste problem ist in zeile 2 ...command not found..diesbezüglich funltioniert glaub auch die 6 zeile nicht wirklich....rest werd ich noch ergänzen und poste es später

6

11.03.2008, 18:34

das liegt daran, dass die {} Als eigener Term definiert sind.

D.h. nach der "{" muss ein leerzeichen stehen. Der Ausdruck musz dann mit einem ";" abgeschlossen werden und vor der "}" musz ebenfalls ein Leerzeichen sein.

Denn die "{}" Klammern sagen aus, das zur Ausfuehrung keine Subschell verwendet werden soll - daher auch das ";" als abschlusz der Sequenz.
"()" im Gegensatz dazu, rufen eine Subshell auf.

[edit]

ich wuerde das so beginnen:

Quellcode

1
2
3
4
5
echo -n "Bitte Wort eingeben: "
read $WORT
set N=$WORT
y=0
x=0
was den Array anbetrifft ... soeweit hat mich mein Buch, was ich gerade angefangen habe, nich nciht gebracht.

PS: eine gute Quelle ist diese Seite


[/edit]
for Windows problems: reboot
for Linux problems: be root

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BorneBjoern« (11.03.2008, 18:39)


linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

7

11.03.2008, 19:06

das problem an zeile 2 ist, dass es eine zuweisung
$n=
nicht gibt
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

8

11.03.2008, 19:21

Zitat

Original von BorneBjoern
D.h. nach der "{" muss ein leerzeichen stehen.


wie bitte?
kann es sein, das du { und [ miteinander verwechsaelst?

führe eine schleife aus, solage das wort noch buchstaben enthält,
schneide in der schleife ein zufällig gewähltes zeichen zb mit ${parameter:offset:länge} aus. die zufällige position erhälst du mit $RANDOM % länge+1, also mit einer modulo-operation.
setze das ausgeschnittene zeichen an einen neuen string an. das geht so lange, bis alle zeichen aus dem wort herausgetrennt wurden.
das geht im prinzip komplett mit internen bashkommandos.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »linuxerr« (11.03.2008, 19:25)


9

11.03.2008, 19:37

danke soweit...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
[code]
#!/bin/bash
echo -n Bitte Wort eingeben!
read $wort
set n=$wort
y=0
x=0
while test $y -le ${#wort}; do 
array[$y]=${wort:$x:1]}
x=$($x+1)
y=$($y+1)
done 
[/CODE]

wie soll ich das jetzt in Zeile 8 machen ??
er gibt die fehler meldung ...test : -le: unary operator expected

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »don_omar« (11.03.2008, 19:42)


linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

10

11.03.2008, 19:52

vielleicht erklärst du mal, wie dein script vom prinzip her funktionieren soll. ich dachte, die buchstaben sollen zufällig durcheinandergeschüttelt werden oder willst du den string einfach umdrehen.
ausserdem würde ich in das script kein read einbauen sondern das script als filter programmieren, sodass das zu schüttelnde wort entweder an stdin gelesen wird oder als parameter übergeben wird. dadurch ist das script für anwendung in anderen scripten wesentlich besser geeignet.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

11

11.03.2008, 20:06

naja
ich will halt zuerst erreichen, dass er die länge des wortes speichert und dann halt alle buchstaben speichert solange noch welche vorhanden sind...dann soll er diese mithilfe einer zufallsvar zufällig vertauschen und wiedergeben

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

12

11.03.2008, 20:11

hab ich doch oben schon geschrieben, schneide aus der variable ein zeichen nach dem anderen raus, bis kein zeichen mehr da ist und speichere die herausgeschnittenen zeichen in einer neuen variable ab, zb

Quellcode

1
2
3
4
5
6
7
8
9
#!/bin/bash
WORT="testwort"
NWORT=
while [ ${#WORT} -gt 0 ]
do
 zufallsposition ermitteln
 zeichen aus WORT herausschneiden und an NWORT anhängen
done
echo "${NWORT}"
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »linuxerr« (11.03.2008, 20:14)


13

11.03.2008, 23:38

@ linuxerr

Eigentlich meinte ich schon "{" und nicht "[". Aber es ging bei dem, was ich meinte, wohl eher um "grouping commands"...

Naja, was bash-ing anbetrifft musz ich wohl noch einige Briketts nachlegen..
for Windows problems: reboot
for Linux problems: be root

14

18.03.2008, 18:47

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo "Bitte geben sie das zu mischende Wort ein."
read wort
x=0
y=0
anzahl=${#wort}
while test $x -le $anzahl; do
	array[$x]=${wort:$x:1}
	x=$[$x+1]
done
echo -n "Das neue Wort lautet: "
while test $y -lt $anzahl; do
	x=$[$RANDOM%$anzahl]
if test "${array[$x]}" != ""; then
	echo -n "${array[$x]}"
	array[x]=""
	y=$[$y+1]
fi
done
echo ""


so hab ich das jetzt...funkts auch

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

15

18.03.2008, 19:07

da du arrays verwendest, wird das script in der sh nicht funktionieren und ein shebang-operator fehlt in deinem script. könnte böse überraschungen geben.
ausserdem führt die zweite while-schleife auch sinnlose durchläufe durch und könnte theoretisch auch 5stunden lang laufen, wenn random immer wieder leere array-felder adressiert.
möglich wäre zb auch

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
WORT="$1"
RWORT=
while [ ${#WORT} -gt 0 ]
do
 POS=$(( $RANDOM % ( ${#WORT}+1 ) ))
 BEGIN=${WORT:0:$POS}
 MITTE=${WORT:$POS:1}
 ENDE=${WORT:$(($POS+1))}
 RWORT="${RWORT}${MITTE}"
 WORT="${BEGIN}${ENDE}"
done
echo "RWORT=${RWORT}"


vorteil: keine sinnlosen leerdurchläufe und keine arrays (höhere geschwindigkeit und geringerer speicherverbrauch.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »linuxerr« (18.03.2008, 19:08)


16

18.03.2008, 19:26

was ist dabei genau
Begin
Mitte
Ende

außerdem gehts bei mir nicht

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

17

18.03.2008, 20:12

ich habe das aktuelle wort in 3 teile geteilt und das ab einer zufälligen position. der vordere teil ist begin der herausgeschnittene buchstabe ist mitte und der rest des wortes ist ende. das script muss mit dem wort als parameter ausgerufen werden.

also zb

scriptname "schüttelwort"
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Thema bewerten