bash: String variablen Inhalts mit fester laenge erzeugen

Post Reply
Message
Author
Drake

bash: String variablen Inhalts mit fester laenge erzeugen

#1 Post by Drake »

Hallo,

ich wurde gerne, wie im Betreff beschrieben, einen String erzeugen, der immer 32 Zeichen lang ist, aber einen Substring variabler Laenge enthalt (<28, >1 Zeichen)

koennte also so aussehen:

xxxxxxxx:${1}:xxxxxxxxx

sind jetzt keine 32, aber die Idee wird klar, denke ich.

Dabei stosse ich auf folgende Probleme:

wie kann ich verifizieren, das ${1} mindestens eines, aber maximal 28 Zeichen hat und keinen Doppelpunkt enthaelt ? (Vorzugsweise nur ASCII und/oder Zahlen).
Wie kann ich einen Doppelpunkt an den Anfang und an das Ende von ${1} setzten.
Wie fuelle ich den Anfang und das Ende mit "x" auf, insbesondere, wenn ${1} eine ungerade Anzahl von Zeichen hat ?

Kurz, ich habe momentan Null Plan, wie ich da ran gehen soll. bash ist ok, auch wenn mir sh lieber waere. Hat jemand eine Idee oder dokus ?

Jochen

Re: bash: String variablen Inhalts mit fester laenge erzeugen

#2 Post by Jochen »

Erster Ansatz:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2"># Prüfen, ob $1 alphanumerisch ist
LEN=`expr "$1" : '[a-zA-Z0-9][a-zA-Z0-9]*$'`
if [ $? != 0 ] ; then
echo "Inhalt von \$1 ist nicht alphanumerisch" >&2
exit 1
fi

# Doppelpunkte drumherumsetzen (und Laenge anpassen)
OUT=":"$1":"
LEN=`expr $LEN + 2`
</font><hr></pre></blockquote>
Damit hast Du zumindest schon mal den ersten Teil: Prüfung auf AlNum (da kannst Du mit dem Inhalt der Variablen LEN auf checken, dass $1 nicht zu lang ist) und Doppelpunkte drumrumsetzen. Da musst Du eine Hilfsvariable mit ins Spiel nehmen, da Du $1 nicht direkt setzen kannst, sondern nur als Parameter beim Aufruf oder mit dem set-Kommando, aber das hat beides "Nebenwirkungen".

Bis hier ist alles rein sh. Die restlichen Zeichen ergeben sich aus Feldbreite - LEN. Dies durch 2 teilen ist Anzahl der Füllzeichen links, REST - LINKE_FUELLZEICHEN ist gleich RECHTE_FUELLZEICHEN. Und dann noch ein Mini-Skript basteln, dass bei Übergabe von Füllzeichen und Anzahl eine entsprechende Zeichenkette erstellt und die genauso vorne und hinten dranpappen wie die Doppelpunkte. Das ist jetzt aber echt Fleissarbeit, ausserdem ggf. mit awk schneller zu erledigen. Schaffst Du diesen Rest?

Jochen

drake

Re: bash: String variablen Inhalts mit fester laenge erzeugen

#3 Post by drake »

Danke. "expr" war mir fremd. Heute scheint "man" Tag zu sein.
Die Geschichte mit den Doppelpunkten anhaengen ist mir im Nachhinein extrem Peinlich ... hab ich wieder zu kompliziert gedacht.
Ich hoffe/denke, den Rest schaffe ich. Bin noch am Raetseln wie ich eine ungerade Zeichenkette aufteile, aber da faellt mir schon was ein. Wenn nicht, werde ich mich mit dem Stand der Dinge zurueckmelden. Vorher folgt aber vermutlich meine Kriegserklaerung an "getopts"...

Vielen Dank nochmal.

Post Reply