Zum Inhalt springen

if then abfrage in script


geiercasi

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von geiercasi
unvollständig/falsch
Link zu diesem Kommentar
Auf anderen Seiten teilen

#!/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 von michaelmeier
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...