geiercasi Geschrieben 17. Januar 2009 Geschrieben 17. Januar 2009 hallo zusammen, könnte mir bitte jemand mit diesem problem auf die sprünge helfen ? in einem script soll eine abfrage erfolgen und dann demenstprechend der richtige befehl ausgeführt werden. abfrage z.b. datei sichern ? if "ja" then cp datei1 nach /das/nach/irgendwo/datei1 if "nein" then exit wie kann man bei der abfrage dann eine antwort vor geben, also standart "ja" das dann nur bestätigt werden muss ? gruß und danke Zitieren
michaelmeier Geschrieben 17. Januar 2009 Geschrieben 17. Januar 2009 Spontan: #!/bin/bash echo "Programm zur Abfrage von Parametern..." echo "Soll Datei bla.test nach /tmp/bla.test gesichert werden? [J]" read eingabe if [ $eingabe == "j" ]; then echo "wird kopiert..." cp bla.test /tmp/bla.test else echo "keine auswahl..." exit fi Nun noch weiter Möglichkeiten des Eingabeparameters abfangen (vgl. man case), return-codes auswerten und dergleichen... und dann kann man damit arbeiten. Zitieren
michaelmeier Geschrieben 17. Januar 2009 Geschrieben 17. Januar 2009 uups... wer lesen kann... naja, k. wenn $eingabe leer ist, dann sollte man natürlich entweder direkt in den kopierteil springen oder aber $eingabe=j setzten - dann haste auch deine defaulteinstellung. Zitieren
geiercasi Geschrieben 17. Januar 2009 Autor Geschrieben 17. Januar 2009 (bearbeitet) danke dir für die hilfe. es funktioniert leider nicht. wenn die ausgabe j oder auch J lautet, wird nicht kopiert: echo "soll der aktuelle kernel gesichert werden? [J]" read eingabe if [ $eingabe == "j" ]; then cp $trunklager/build/modified/firmware/var/tmp/kernel.image $kernellager/kernel-$kerneldate.image echo "kernel wurde als kopiert dateiname kernel-$kdate.image" else echo "kernel wurde nicht kopiert" fi eine doppelabfrage funktioniert leider auch nicht. das hängt wohl mit dem ersten problem zusammen, aber evntl. ist ja noch ein fehler den du erkennen kannst. echo "soll der kernel auf die Box ? [J]" read eingabe if [ $eingabe == "j" ]; echo "Welche Box, oben oder unten ? [oben]" read eingabe if [ $eingabe == "oben" ]; then $trunk/tools/push_firmware build/modified/firmware/var/tmp/kernel.image -f 169.254.93.1 if [ $eingabe == "unten" ]; then $trunk/tools/push_firmware build/modified/firmware/var/tmp/kernel.image -f 192.168.178.1 echo "kernel wurde auf die obere box kopiert" else echo "kernel wurde nicht auf die Box kopiert" fi es soll also entweder ein kernel auf die box oder nicht. falls er auf die box soll, dann beseht die frage auf welche der beiden boxen. gruß und danke Bearbeitet 17. Januar 2009 von geiercasi unvollständig/falsch Zitieren
michaelmeier Geschrieben 17. Januar 2009 Geschrieben 17. Januar 2009 (bearbeitet) #!/bin/bash echo "soll der kernel auf die Box ? [J]" read eingabe if [ $eingabe == "j" ]; then echo "Welche Box, oben oder unten ? [oben]" read bestimmungsort case $bestimmungsort in oben) echo "oben mache ich nun dinge..." ;; unten) echo "unten mache ich nun dinge..." ;; *) echo "Nee - ohne ortsangabe mache ich gar nichts!" ;; esac else echo "Kernel soll nicht kopiert werden? Ok... bin dann mal wech..." exit fi Musste nun nur noch deine Kopieraktion reinbasteln und fertig. Hier noch schnell das Testergebnis: my_host:~ # ./test.sh soll der kernel auf die Box ? [J] j Welche Box, oben oder unten ? [oben] oben oben mache ich nun dinge... ################################ my_host:~ # ./test.sh soll der kernel auf die Box ? [J] j Welche Box, oben oder unten ? [oben] unten unten mache ich nun dinge... ################################ my_host:~ # ./test.sh soll der kernel auf die Box ? [J] j Welche Box, oben oder unten ? [oben] quatsch Nee - ohne ortsangabe mache ich gar nichts! ################################ my_host:~ # ./test.sh soll der kernel auf die Box ? [J] n Kernel soll nicht kopiert werden? Ok... bin dann mal wech... ################################ Bearbeitet 17. Januar 2009 von michaelmeier Zitieren
geiercasi Geschrieben 17. Januar 2009 Autor Geschrieben 17. Januar 2009 cool, danke schön. es funktioniert nun alles wie es soll. gruß Zitieren
michaelmeier Geschrieben 17. Januar 2009 Geschrieben 17. Januar 2009 aber nicht vergessen, die entsprechenden returncodes abzufangen. denn: was, wenn die kiste, zu der kopiert werden soll, gar nicht online ist? oder aber das kopieren (aus welchen gründen auch immer) fehlschlägt? wäre dann also sowas ind er art: [...] case $bestimmungsort in oben) echo "oben mache ich nun dinge..." # ist maschine online?? ping -c1 $zielhost_oben >> /dev/null rc=$? if [ $rc -eq 0 ]; then cp $quelle $ziel rc=$? if [ $rc -eq 0]; then echo "kopieren erfolgreich" else echo "kopieren fehlgeschlagen! Error-Code ${rc}!" fi else echo "Zielhost scheint nicht oben zu sein. Ping liefert RC=${rc}!" fi ;; bzw. das noch schön in eine funktion ausgelagert und alles ist gut. es sieht mir so aus, als würdest zu da schön kernel durch die gegend kopieren... und wenn da was schief geht, dann zieht das erstmal wieder arbeit nach sich. dann doch besser mal die return-codes zwischenzeitlich prüfen. Zitieren
geiercasi Geschrieben 17. Januar 2009 Autor Geschrieben 17. Januar 2009 im vortgeschrittenen kurs werde ich das script dann erweitern. mal schaun was mir das bestellte buch bringt. in diesem fall ist es nicht so schlimm, hier wird für die fritzbox ein freetzkernel erstellt. hier sind 2 boxen in betrieb, eine ist für notfälle falls mal was schief läuft. es ist immer nur eine eingeschaltet, da beide die selbe config haben.welche on ist, das ist mir bekannt falls jemand das script gebrauchen kann, hier ist es: #!/bin/bash echo off trunk=/home/karlchen/fritz.box/freetz/freetz-trunk/ kernellager=/home/karlchen/fritz.box/freetz/kernel/ ipboxoben=169.254.93.1 ipboxunten=192.168.178.1 kerneldate=`date +%d%m%R` clear echo "in freetz trunk verzeichniss wechseln" cd $trunk sleep 1 echo "svn updaten" svn up sleep 1 cd $trunk echo "menuconfig aufrufen" make menuconfig cd $trunk echo "zombies rauswerfen" make config-clean-deps make dtmfbox-dirclean make pjproject-dirclean sleep 1 echo "soll der aktuelle kernel gesichert werden? j/n [j]" read eingabe if [ $eingabe == "j" ]; then cp $trunk/build/modified/firmware/var/tmp/kernel.image $kernellager/kernel-$kerneldate.image echo "kernel wurde als kopiert dateiname kernel-$kerneldate.image" else echo "kernel wurde nicht kopiert" fi cd $trunk echo "kernel erstellen" make echo "soll der kernel auf die Box ? j/n [j]" read eingabe if [ $eingabe == "j" ]; then echo "Welche Box, oben oder unten ? [oben]" read bestimmungsort case $bestimmungsort in oben) echo "der kernel wird auf die obere box kopiert, reboot nicht vergessen !" $trunk/tools/push_firmware build/modified/firmware/var/tmp/kernel.image -f $ipboxoben ;; unten) echo "der kernel wird auf die untere box kopiert, reboot nicht vergessen !" $trunk/tools/push_firmware build/modified/firmware/var/tmp/kernel.image -f $ipboxunten ;; *) echo "Nee - ohne ortsangabe mache ich gar nichts!" ;; esac else echo "der kernel soll nicht kopiert werden? Ok, dann geht ich ohne installation auf die box zuende" exit fi echo "ENDE" exit gruß und nochmal danke für deine unterstützung Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.