PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bashscript: Stringinhalt zählen



marco2080
06.01.07, 23:49
Hallo Leute!!

Sorry,Ich muss euch nochmal nerven bin noch ein Bashscript-Anfänger:
Hoffe die Überschrift war richtig!

Ich möchte gern der Benutzer mehr als 3 Zeichen eingibt.
Wenn weniger dann Spruch "Fehlerhafte Eingabe-" und Wiederholung der Eingabe(name).

Meine bisherigen Ideen waren mit expr length, test -n und mein aktueller sieht so aus:



# Ueberpruefen auf Leereingabe
pruef=`wc -l | tee anz`
cut anz
while anz >3 ; do
echo -e "\033[1;31mFehlerhafte eingabe! Bitte mehr als 3 Zeichen eingeben!\033[0m"
echo "Neue Eingabe - Bitte Namen vergeben!"
read name
done


irgendwie war das alles bisher nicht so mit Erfolg gekrönt :(

Vielen Dank für eure Antworten!

Gruss,
Marco2080

zyrusthc
07.01.07, 00:07
Versuche es doch mal mit wc -c
Aus manpage von wc

-c, --bytes
print the byte counts


Mit -l zählst du nämlich Zeilen!

Greeez Oli

marco2080
07.01.07, 00:28
# Ueberpruefen auf Leereingabe
pruef=`wc -c | tee anz`
cut anz
while anz >3 ; do
echo -e "\033[1;31mFehlerhafte eingabe! Bitte mehr als 3 Zeichen eingeben!\033[0m"
echo "Neue Eingabe - Bitte Namen vergeben!"
read name
done


Hallo!
Auch mit wc -c klappt es nicht, hab da scheinbar eine Endlosschleife drin^^.
Nach Eingabe weniger als 3 Zeichen sowie mit mehr als 3 Zeichen
kommt nichts mehr ich kann es nur noch mit STRG+C abbrechen. :confused:

Wer kann mir helfen???

Danke!!


Gruss,
marco2080

zyrusthc
07.01.07, 03:28
Warum machst es nicht so ? Das funktioniert bei mir:

#!/bin/sh
# Ueberpruefen auf Leereingabe

echo "Name eingeben"
read name
checkname=$(echo $name | wc -c)

while [ "$checkname" -lt "5" ] ; do
echo $checkname
echo -e "\033[1;31mFehlerhafte eingabe! Bitte mehr als 3 Zeichen eingeben!\033[0m"
echo "Neue Eingabe - Bitte Namen vergeben!"
read name
checkname=$(echo $name | wc -c)
done

echo "Eingabe war OK"

Die 5 steht für 3 Zeichen .

bernie
07.01.07, 03:30
Hi,

also bei mir würde das etwa so aussehen:



while (true); do
echo -n "Bitte Name eingeben: "
read name

if( test $(echo $name |wc -c) -gt 4); then
break;
else
echo "Bitte wiederholen Sie die Eingabe."
fi;
done;


scheinbar zählt "wc -c" auch das CR/NL am Ende des Strings, deswegen das "grösser als 4".

Ciao, Bernie

zyrusthc
07.01.07, 03:34
Da sieht man mal wieder , das viele Wege zum Erfolg führen können :)

Der Gestreifte
07.01.07, 13:09
Noch ne einfachere Möglichkeit (auch wen es natürlich vorteilhaft ist, möglichst viele Tools zu benutzen, um den Umgang mit ihnen nicht zu verlernen ;o):
VAR=1234
echo ${#VAR}

marco2080
11.01.07, 09:56
Ich Danke euch, hat wunderbar geklappt!! :o