[gelöst] (wahrscheinlich simple) Shellscript-Fragen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tretelrusch
Beiträge: 77
Registriert: 10.12.2006 18:37:38

[gelöst] (wahrscheinlich simple) Shellscript-Fragen

Beitrag von tretelrusch » 04.08.2008 10:53:47

Hallo!
Ich habe zur Shellscript-Programmierung (bash) einige Probleme, auf die ich nirgens eine Antwort gefunden habe, die aber recht einfach sein müssten:

1.) Wie kann ich die Eingabeaufforderung mit der Enter-Taste realisieren? Bisher habe ich das so gemacht:

Code: Alles auswählen

echo -n "jetzt upgraden? [j|n]"
read j
if [ "j" = "$j" ]; then
apt-get update && apt-get upgrade && echo "Erfolgreich"
fi
Ich will nicht immer "j" eingeben müssen, sondern mit der Entertaste bestätigen, weil das wesentlich intuitiver und einfacher ist.

2.) Wie kann ich mittels einer Schleife oder ähnliches ein Programm so lange wiederhohlen, bis es erfolgreich war? Z. B. schlägt apt-cdrom immer fehl, wenn man zu schnell Enter drückt. Ich habe folgendes versucht, was aber nicht funktioniert; das Skript läuft nach dem Fehler einfach mit dem nächsten Befehl weiter. Wo liegt der Fehler?

Code: Alles auswählen

echo -n "Bitte DVD-1 einlegen"
until
[ "$?" = "0" ]; do
apt-cdrom -f add
done
3.) Wie kann ich einen Textblock in eine Datei anfügen, aber nicht ans Ende, sondern z. B. in die vierte Zeile? Anhängen geht ja mit ">>". Das geht wohl irgendwie mit sed, aber damit komm ich beim besten Willen nicht klar. Gibt es eine einfachere Möglichkeit?

Danke und Gruß,
tretelrusch
Zuletzt geändert von tretelrusch am 04.08.2008 21:37:42, insgesamt 1-mal geändert.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: (wahrscheinlich simple) Shellscript-Fragen

Beitrag von rendegast » 04.08.2008 12:13:48

man bash

Code: Alles auswählen

select
    The select construct allows the easy generation of menus. It has almost the same syntax as the for command:

              select name [in words ...]; do commands; done
dann gibt es zBsp dialog
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

FitzeFatze
Beiträge: 834
Registriert: 06.07.2004 10:08:21

Re: (wahrscheinlich simple) Shellscript-Fragen

Beitrag von FitzeFatze » 04.08.2008 13:06:16

oder du sagst einfach
(vorsicht, pseudocode):

Code: Alles auswählen

if eingabe == ""
    blaaa
fi

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: (wahrscheinlich simple) Shellscript-Fragen

Beitrag von roli » 04.08.2008 16:49:00

Hi,

zu deinem zweiten Problem sagt "man test":
man test hat geschrieben: INTEGER1 -eq INTEGER2
INTEGER1 is equal to INTEGER2
Tausch also man dein = gegen -eq
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: (wahrscheinlich simple) Shellscript-Fragen

Beitrag von gms » 04.08.2008 21:08:22

roli hat geschrieben:zu deinem zweiten Problem sagt "man test":
man test hat geschrieben: INTEGER1 -eq INTEGER2
INTEGER1 is equal to INTEGER2
Tausch also man dein = gegen -eq
dieser Vergleich wäre zwar schöner, aber der "gesuchte Fehler" ist das nicht, auch bei einem Stringvergleich wäre "0" gleich "0".
Die until-Schleife wird in beiden Fällen jedoch nie durchlaufen, denn durch das "echo" Kommando ist die Variable $? auf 0 gesetzt.
tretelrusch hat geschrieben: Wie kann ich einen Textblock in eine Datei anfügen, aber nicht ans Ende, sondern z. B. in die vierte Zeile?

Code: Alles auswählen

gms@gms1 ~ $ echo -e "1\n2\n3\n4\n5\n6\n" >x.txt
gms@gms1 ~ $ awk 'FNR==4{print "bla bla"}{print}' x.txt
1
2
3
bla bla
4
5
6

gms@gms1 ~ $ sed -e '4i\bla bla' x.txt
1
2
3
bla bla
4
5
6
tretelrusch hat geschrieben: 1.) Wie kann ich die Eingabeaufforderung mit der Enter-Taste realisieren? Bisher habe ich das so gemacht:

Code: Alles auswählen

echo -n "jetzt upgraden? [j|n]"
read j
if [ "j" = "$j" ]; then
apt-get update && apt-get upgrade && echo "Erfolgreich"
fi
am einfachsten wäre die Abfrage umzudrehen:

Code: Alles auswählen

echo -n "jetzt upgraden? [j|n]"
read j
if [ "n" != "$j" ]; then
 apt-get update && apt-get upgrade && echo "Erfolgreich"
fi
Gruß
gms

tretelrusch
Beiträge: 77
Registriert: 10.12.2006 18:37:38

Re: (wahrscheinlich simple) Shellscript-Fragen

Beitrag von tretelrusch » 04.08.2008 21:37:09

Vielen Dank für die Antworten, jetzt funktioniert alles! Ich habe mein Skript nun mit dem select-Menü aufgebaut.

Antworten