Shellskript: Variable einlesen und prüfen
Shellskript: Variable einlesen und prüfen
Hi,
ich mach mir gerade ein kleines Administrationsskript, das vom User einige Eingaben erwartet. Nun will ich, dass diese geprüft werden auf bestimmte Zeichen, die von der Shell, sed etc. besonders interpretiert werden. Wenn der user etwa "asdf$asdf" eingibt, will ich diesen String prüfen und ein Escapezeichen vor das $ setzen (\), um den STring weiterverarbeiten zu können.
Womit kann ich also einen String auf diese bestimmten Zeichen prüfen und "escapen"? Oder muss ich perl auspacken?
gruss hugenay
ich mach mir gerade ein kleines Administrationsskript, das vom User einige Eingaben erwartet. Nun will ich, dass diese geprüft werden auf bestimmte Zeichen, die von der Shell, sed etc. besonders interpretiert werden. Wenn der user etwa "asdf$asdf" eingibt, will ich diesen String prüfen und ein Escapezeichen vor das $ setzen (\), um den STring weiterverarbeiten zu können.
Womit kann ich also einen String auf diese bestimmten Zeichen prüfen und "escapen"? Oder muss ich perl auspacken?
gruss hugenay
Re: Shellskript: Variable einlesen und prüfen
Irgendwas Shell-externes wird das einfachste sein. Shell-intern könntest Du allerdings mit ${variable//pattern/zeichenkette} arbeiten, sieh mal in der bash(1)-manpage unter "Parameter Expansion".
Ansonsten schlage ich sed(1) vor:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
CHECKED_VAR=$(echo "$VAR" | sed -e 's/\<!--no-->\<!--no-->/\<!--no-->\<!--no-->\<!--no-->\<!--no-->/g' -e 's/\<!--no-->*/\<!--no-->\<!--no-->*/' <i>usw.</i>)
</font><hr></pre></blockquote>
Allerdings hast Du in allen Fällen eine Menge zu tippern, um <i>alle</i> Möglichkeiten zu checken. Ein eigenes "quote_all_wildcards"-Kommando ist mir leider nicht bekannt. Wobei mir einfällt: Wenn Du eins bastelst, würdest Du es hier posten?
Jochen
Ansonsten schlage ich sed(1) vor:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
CHECKED_VAR=$(echo "$VAR" | sed -e 's/\<!--no-->\<!--no-->/\<!--no-->\<!--no-->\<!--no-->\<!--no-->/g' -e 's/\<!--no-->*/\<!--no-->\<!--no-->*/' <i>usw.</i>)
</font><hr></pre></blockquote>
Allerdings hast Du in allen Fällen eine Menge zu tippern, um <i>alle</i> Möglichkeiten zu checken. Ein eigenes "quote_all_wildcards"-Kommando ist mir leider nicht bekannt. Wobei mir einfällt: Wenn Du eins bastelst, würdest Du es hier posten?
Jochen
Re: Shellskript: Variable einlesen und prüfen
Nochwas zum Zusammenhabn erstmal:
eine Funktion des Skriptes: der user wird gefragt, welches wort er ändern will und wie es nach der Änderung nachher aussehen soll. Das heisst also, dass ich die damit eingelesene Variable an sed übergebe, und da gibts dann natürlich ne menge fallen ...
@Jochen:
Ja, sed nehm ich bisher. Hab nur Angst, dass der Benutzer was findet, das das Skript nicht verarbeiten kann und dann allerhand Unheil anrichtet.
awk wollte ich sonst nehmen und mir mal die index, match, gsub etc. funktionen anaschauen.
Was mich übrigens am meisten stört: beruflich arbeite ich nur unter solaris und beispielsweise der grep dort ist viel schwächer auf der Brust. Portieren muesste ich das skript dann auch noch, wenn ich es nicht nur unter linux nutzen will.
Vielleicht sollt ich doch mal mehr perl lernen.
eine Funktion des Skriptes: der user wird gefragt, welches wort er ändern will und wie es nach der Änderung nachher aussehen soll. Das heisst also, dass ich die damit eingelesene Variable an sed übergebe, und da gibts dann natürlich ne menge fallen ...
@Jochen:
Ja, sed nehm ich bisher. Hab nur Angst, dass der Benutzer was findet, das das Skript nicht verarbeiten kann und dann allerhand Unheil anrichtet.
awk wollte ich sonst nehmen und mir mal die index, match, gsub etc. funktionen anaschauen.
Was mich übrigens am meisten stört: beruflich arbeite ich nur unter solaris und beispielsweise der grep dort ist viel schwächer auf der Brust. Portieren muesste ich das skript dann auch noch, wenn ich es nicht nur unter linux nutzen will.
Vielleicht sollt ich doch mal mehr perl lernen.
Re: Shellskript: Variable einlesen und prüfen
Tja, das mit dem Portieren ist so 'ne Sache. Die meisten GNU-Tools findest Du allerdings fix und fertig unter <a href="http://www.sunfreeware.com/" target="_blank"><!--auto-->http://www.sunfreeware.com/</a><!--auto--> als Solaris-Packages. Ansonsten tun sich zwischen Solaris und Linux der sed und der awk nicht viel. Im Falle des Falles ist die GNU-Doku sehr korrekt mit Hinweisen, was standardkonform und was eine GNU-Erweiterung ist. Wenn Du Linux nicht als Hobby, sondern mehr als Lern- und Werkstation für Solaris verwendest, könnte dich vielleicht auch Solaris 8/x86 interessieren? Das findest Du unter... ach Mist, habe den Link gerade nicht hier, liefere ich morgen nach. Sind 4 ISO-Images (Installation, Software 1&2, Dokumentation).
Wenn Du Dich mit sed(1) heimisch fühlst, dann nimm den awk nicht. Für die Tätigkeit würdest Du letzten Endes mit dem awk(1) nur sed(1) emulieren (über gsub()). Das Problem mit dem "Findet der USer nicht doch ein Loch" hängt im Prinzip der Sache, nicht im verwendeten Tool.
Jochen
Wenn Du Dich mit sed(1) heimisch fühlst, dann nimm den awk nicht. Für die Tätigkeit würdest Du letzten Endes mit dem awk(1) nur sed(1) emulieren (über gsub()). Das Problem mit dem "Findet der USer nicht doch ein Loch" hängt im Prinzip der Sache, nicht im verwendeten Tool.
Jochen
Re: Shellskript: Variable einlesen und prüfen
Ja, da ist der Link. Vielleicht hilft's Dir ja weiter - nicht, dass ich Dich von Linux wegbringen will...
<a href="ftp://ftp.fsn.hu/pub/CDROM-Images/solaris" target="_blank"><!--auto-->ftp://ftp.fsn.hu/pub/CDROM-Images/solaris</a><!--auto-->
Jochen
<a href="ftp://ftp.fsn.hu/pub/CDROM-Images/solaris" target="_blank"><!--auto-->ftp://ftp.fsn.hu/pub/CDROM-Images/solaris</a><!--auto-->
Jochen
Re: Shellskript: Variable einlesen und prüfen
danke Jochen, bin auch fertig mit dem Skript. Ist noch hochgradig optimierungsbedürftig. Viel zu viele Funktionen, aber die will ich langfristig in meine profile einbauen.
Von x86 Solaris halte ich leider nicht viel. Ist aber auch gar nicht nötig, denn Sun Hardware habe ich selbst und steht auch im Job genug rum. Das Dumme daran ist nur, dass ich auf den Maschinen fürs Feld nicht einfach GNU grep (das fehlt mir am meisten) Installieren kann, da gibts ne vorgeschriebene Paketliste ...
gruss hug.
Von x86 Solaris halte ich leider nicht viel. Ist aber auch gar nicht nötig, denn Sun Hardware habe ich selbst und steht auch im Job genug rum. Das Dumme daran ist nur, dass ich auf den Maschinen fürs Feld nicht einfach GNU grep (das fehlt mir am meisten) Installieren kann, da gibts ne vorgeschriebene Paketliste ...
gruss hug.
Re: Shellskript: Variable einlesen und prüfen
Hi Hug,
getopts wäre noch eine Möglichkeit , dort kannst Du festlegen welche Optionen ,Parameter usw. mitgegeben werden dürfen.
Es ist immer eine Erweiterung möglich und selbst die sinnlosesten Eingaben werden bei vernünftiger Programierung mit dem Menue der erlaubten Parameter etc. beantwortet .
bis denne Thomas
getopts wäre noch eine Möglichkeit , dort kannst Du festlegen welche Optionen ,Parameter usw. mitgegeben werden dürfen.
Es ist immer eine Erweiterung möglich und selbst die sinnlosesten Eingaben werden bei vernünftiger Programierung mit dem Menue der erlaubten Parameter etc. beantwortet .
bis denne Thomas
Re: Shellskript: Variable einlesen und prüfen
danke! aber wie gesagt, ich muss ja die Scripte auch Solaris fähig machen. Muss mal schaun obs da auch getopts gibt. Ich will dort eigentlich nichts installieren.
Re: Shellskript: Variable einlesen und prüfen
getopts sollte als shell-builtin vorhanden sein. Mindestens bei bash/ksh, ansonsten auch als /usr/bin/getopts auf Solaris 2.6 vorhanden.
Jochen
Jochen
Re: Shellskript: Variable einlesen und prüfen
ok, überzeugt, jetzt muss ich nurnoch die zeit finden .... <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
- Stormbringer
- Posts: 1570
- Joined: 11. Jan 2001 11:01
- Location: Ruhrgebiet
Re: Shellskript: Variable einlesen und prüfen
Hi hugenay,
vielleicht per <!--http--><a href="http://www.google.com/" target="_blank">google</a><!--url-->, <!--http--><a href="http://www.ixquick.com/" target="_blank">ixquick</a><!--url--> oder <!--http--><a href="http://www.metager.de/" target="_blank">metager</a><!--url-->...? <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Zur Not T. Ohrner nach den Zeitdieben fragen!!! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Gruß
vielleicht per <!--http--><a href="http://www.google.com/" target="_blank">google</a><!--url-->, <!--http--><a href="http://www.ixquick.com/" target="_blank">ixquick</a><!--url--> oder <!--http--><a href="http://www.metager.de/" target="_blank">metager</a><!--url-->...? <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Zur Not T. Ohrner nach den Zeitdieben fragen!!! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Gruß
Last edited by Stormbringer on 10. Nov 2001 15:50, edited 2 times in total.
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)