shell script - eingabe verändern

D

der_flo

Mitglied
Thread Starter
Dabei seit
04.03.2006
Beiträge
51
Reaktionspunkte
1
shell script - eingabe verändern - sed

Guten Abend!

mit folgendem Script möchte ich einen Drucker auf verschiedenen MBP's installieren.
Code:
#!/bin/sh
read -p "Username:" kennung
read -s -p "Passwort:" passwort
echo ""
read -s -p "Wiederhole Passwort:" passwort2
echo ""

if [ $passwort = $passwort2 ]; then
		curl -k -o /tmp/PRINTER.ppd https://pathtodriver/driver.ppd
		lpadmin -p MeinDrucker " -E -v smb://$kennung:$passwort@pathtoPrinter/lp -P /tmp/PRINTER.ppd -D 'Printer'
 		rm /tmp/PRINTER.ppd
 		echo "Drucker erfolgreich installiert"
	else 
		echo "Passworteingaben nicht identisch".
	fi

Beim Username sind keine Sonderzeichen erlaubt, aber beim Passwort (ist ja auch irgendwo sinnvoll) und hier liegt mein Problem.
Diese Sonderzeichen "zerstören" mir den Befehl lpadmin [..]
Somit müss im Passwort allen Sonderzeichen ein \ vorrausgesetzt werden, damit alles funktioniert.
Kann mir jemand einen Hinweis geben, wie das realisierbar ist?

Vielen Dank, flo
 
Zuletzt bearbeitet:
Du du musst nicht jedes Sonderzeichen maskieren. Für die meisten reicht es Anführungszeichen darumzusetzen.

Die aus der URL kannst du aber z.B. folgendermaßen ersetzen:
Code:
passwort=`echo "$passwort" | sed "s/\\([/@]\\)/\\\\\\1/g"`
 
viele Dank für den Hinweis. Werde ich ausprobieren

flo
 
leider funktioniert das ganze nicht ...

mit [:cntrl:] sollen die Sonderzeichen erfasst werden und ein \ vor das Sonderzeichen gesetzt werden.
wo ist mein Fehler?
Code:
passwort=`echo "$passwort" | sed "s/[:cntrl:]/\[:cntrl:]/g"`
 
cntrl sind nicht die Sonderzeichen, die du dir vorstellst... Das sind newlines und so weiter.

Außerdem muss auf der "rechten Seite" nicht das gleiche stehen, sondern \\1, und ein Backslash muss \\\\ lauten, weil der ja bei der Eingabe maskiert sein muss. Auf der Linken Seite fehlen die Klammern.

Benutz einfach mal deine Variablen mit Anführungszeichen:
"$passwort" anstatt $passwort
Damit hast du dich schon um alle Shell-Sonderzeichen gekümmert!

Wenn das immer noch nicht reicht, musst du @ und / maskieren, wie von mir gezeigt.
 
danke für die Hilfe.
wieso muss ich nur @ und / maskieren?
ein : an der falschen Stelle in smb://... "zerstört" doch auch schon das ganze.

@ : ; ! kann ich erfolgreich maskieren mit einem \ davor, aber wenn ich versuche ein / oder ein Leerzeichen zu maskieren heißt es immer bad flag

flo
 
Stimmt, : auch. Alle von dir gewünschten Zeichen machst du dann folgendermaßen:

Code:
passwort=`echo "$passwort" | sed "s/\\([ /@:;!]\\)/\\\\\\1/g"`
 
wieso steht auf der rechten Seite diese 1?
ich versteh das nicht ganz...
 
Grob gesagt, dass beim Suchen und ersetzen, der ersetzte Teil auch wieder eingefügt wird. Also in Worten etwa:

Ersetze: Zeichen X,Y,Z
durch: \ gefolgt vom 1. Zeichen

http://www.grymoire.com/Unix/Sed.html#uh-8
 
  • Gefällt mir
Reaktionen: der_flo
vielen Dank für die viele Geduld und das ausführliche Erklären!

flo
 
Zurück
Oben Unten