Hilfe in Bash-Programmierung

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von exponator, 25.05.2006.

  1. #1 exponator, 25.05.2006
    exponator

    exponator Grünschnabel

    Dabei seit:
    22.05.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo,
    Bin Neuling was der Shellprogrammierung anbelangt.
    Gibt es eine Möglichkeit in einem Bash-Script einen Goto-Befehl nachzubilden?
    Ich habe mir das Thread http://www.unixboard.de/vb3/showthread.php?t=1853 angesehen. Aber das erfüllt nicht so recht meinem Wunsch, weil der Zahlenbereich einfach zu groß ist.

    Ich habe folgendes im Script computer stehen:
    Code:
    CompNameA="pc"
    echo -n "Computername: pc"; read CompName
    if [ -z $CompName ]
      then echo "Du hast keinen Computernamen eingegeben."; sleep 2; sh ./computer
    fi
    if [ "${#CompName}" != 3 ]
      then echo "Es wird eine 3-stellige Eingabe verlangt."; sleep 2; sh ./computer
    fi
    case $CompName in
    	100) echo "Diesen Computernamen kannst Du nicht verwenden."; sleep 2; sh ./computer;;
    	101) echo "Diesen Computernamen kannst Du nicht verwenden."; sleep 2; sh ./computer;;
    	102) echo "Diesen Computernamen kannst Du nicht verwenden."; sleep 2; sh ./computer;;
    	103) echo "Diesen Computernamen kannst Du nicht verwenden."; sleep 2; sh ./computer;;
    	  *) echo "Ihre Angabe: pc"$CompName;;
    esac
    echo -n "Angabe korrekt? ";
    while true
    do
            read  JN
            case "$JN" in
            n)  sh ./computer;;
            N)  sh ./computer;;
            *) IPEz=$CompName; $CompName=$CompName01&&$CompName ;;
            esac
    done
    ...
    
    Man soll hier einen Computernamen eingeben, der auf einer IP-Endziffer basiert.
    Zum Beispiel: 089. Unbedingt 3-stellig.
    Daraus entsteht die Variable $CompName = 089.
    Wird Enter gedrückt oder nicht 3-stellig eingegeben, wird das Programm neu gestartet.
    Bisher fiel mir nicht anderes ein, als bei einer Falscheingabe das Script immer wieder neu starten zu lassen.
    Besser wäre natürlich die Möglichkeit, mit leerem Feld zur Eingabe zurückzuspringen.

    1. Wie weise ich der Variablen $IPEz (IPEndziffer) den Wert der Variablen $CompName zu?
    2. Wie füge ich die Variablen $CompNameA und $CompName zusammen, um daraus die neue Variable $CompName zu bilden?
    3. Wie klaue ich zu guter Letzt der $IPEz, wenn die IP unter 100 bzw. unter 10 liegt, die anführende 0?

    Ich kannte bislang nur die Basic-Programmierung eines C64. Da gings einfacher.

    Kann mir trotzdem jemand helfen?

    ---
    thanks
    exponator
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 25.05.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Bau dir für die Eingabe eine Funktion, die sich im Fehlerfall selbst nochmal aufruft.

    Gruß Wolfgang
     
  4. #3 exponator, 26.05.2006
    exponator

    exponator Grünschnabel

    Dabei seit:
    22.05.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hi Wolfgang,
    tut mir leid, das ich mich nicht auskenne.
    Aber wie soll sowas aussehen?
    Ich habs noch nie gemacht.
    Alle Google- und Boardsuchen ergaben keinen Erfolg.

    ---
    Gruß
    exponator

    Ach was wäre es doch schön, kenne man sich doch nur aus.
     
  5. #4 DennisM, 26.05.2006
    DennisM

    DennisM Moderator u. Newsposter

    Dabei seit:
    08.05.2004
    Beiträge:
    4.883
    Zustimmungen:
    0
    Ort:
    GER/NRW/Essen
    Einlesen kannst du per read $FOO.
    Für die Wiederholung stellst du einfach eine Bedingung auf, if.

    MFG

    Dennis
     
  6. codc

    codc /dev/null

    Dabei seit:
    12.01.2004
    Beiträge:
    607
    Zustimmungen:
    0
  7. #6 phrenicus, 29.05.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    Moin,

    Code:
    function lese_input() {
    echo -n "Computername: pc"; read CompName
    test -z $CompName && \
    ( echo "Du hast keinen Computernamen eingegeben."; sleep 2; lese_input ; )
    }
    
    function check_input() {
    if [ "${#CompName}" != 3 ]
      then echo "Es wird eine 3-stellige Eingabe verlangt."; sleep 2; lese_input ;
    fi
    
    case $CompName in
    	100|101|102|103) echo "Diesen Computernamen kannst Du nicht verwenden."; sleep 2; lese_input ;;
    	  *) echo "Ihre Angabe: pc"$CompName;;
    esac
    
    echo -n "Angabe korrekt? "; read JN
    
    case "$JN" in
            N|n) lese_input;;
            *) IPEz=$CompName; $CompName=$CompName01&&$CompName ;;
    esac
    }
    
    sync
     
  8. #7 exponator, 30.05.2006
    exponator

    exponator Grünschnabel

    Dabei seit:
    22.05.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hi phrenicus,
    so einfach geht das? Vielen vielen Dank dafür.
    Aber wie springt man wieder zur Eingabe zurück?
    So wie:
    Eingabe erfolgt am Bildschirm in Zeile 20.
    Keine IP eingegeben erfolgt Meldung.
    Nach 2 Sekunden erlischt die Meldung und springe zur Eingabe in Zeile 20 zurück.

    Aber ich komme auch schon ein großes Stück voran.
    Ich habe allerdings die Richtung geändert.
    Es muss nun nicht der CompName sondern die IPEz (IP-Endziffer) angegeben werden.
    Grund: Es werden NUR noch Computer beginnend mit pc (z.B.: pc098) in die Domaene eingegliedert. Es kann niemand einen Computer mit anderem Namen, wie z.B. Uranus eingliedern.
    Die andere Möglichkeit wäre eine Abfrage ob die Eingabe ein numerischer String ist. Wenn nicht,, mache Meldung.

    Muss jetzt auch noch für den Nameserver und diverse Dateien, in denen die IP des Rechners eingefügt wird, wissen, wie ich evtl. anführende Nullen abschneide. Das müsste ich doch mittels test oder if hinbekommen.

    Habe zwar schon was in der Richtung gefunden, scheint aber noch nicht das richtige zu sein. Es fehlt noch die Abfrage, ob es überhaupt Nullen am Anfang des Strings IPEz gibt.
    Gefunden habe ich
    "basename {string} {suffix}" oder auch cut -c {Zeichen}.
    Nur, wie handhaben.
    Gedacht hatte ich mir das so:
    Der User gibt nun eine 3-stellige Zahl ein. (Funktioniert auch schon)
    Es wird geprüft, ob der PC bereits im System existiert. (Funktioniert auch schon)

    Und morgen geht 's weiter.
    Bis dahin.

    cu
    exponator
     
  9. #8 Wolfgang, 30.05.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Um aus einer Variablen die führenden Nullen zu entfernen, kannst du verschiedene Mechanismen nutzen.
    ein schnelles Beispiel mit sed

    Code:
    read a
    b=$(echo $a|sed -e '/^[0-9]*$/!d;s/^0*//g'); 
    if [ -n "$b" ]; 
    then 
    echo $b; 
    else 
    echo "Eingabe enthält unerlaubte Zeichen";
    
    fi
    
    HTH
    Gruß Wolfgang
     
  10. #9 exponator, 31.05.2006
    Zuletzt bearbeitet: 31.05.2006
    exponator

    exponator Grünschnabel

    Dabei seit:
    22.05.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hi Wolfgang,
    was ist das?
    Was passiert denn hier mit den ganzen Zeichen?
    Soviele Zeichen kann sich doch ein Anfänger gar nicht merken.
    Könntest Du mir das bitte kurzerhand zerpflückend erklären?
    Ich möchte es ja gern verstehen.
    Aber Goggle, Wikipedia, Linux Kompendium und Konsorten spucken es nicht aus.

    Bis " sed -e'/^ " hab ichs noch hinbekommen.
    ^-Zeichen steht für den Anfang eines Strings.

    thanks
    exponator
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
  13. #11 phrenicus, 31.05.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    Hallo exponator,

    Gar nicht. Es geht so:

    Funktion lese_input (Zeile völlig egal)
    Keine IP eingegeben erfolgt Meldung.
    Nach 2 Sekunden erlischt die Meldung und springe zur Funktion lese_input zurück.

    Verstanden?

    Gruß
     
Thema:

Hilfe in Bash-Programmierung

Die Seite wird geladen...

Hilfe in Bash-Programmierung - Ähnliche Themen

  1. Hilfe.

    Hilfe.: Hallo ich habe centos 7.2.15.11 Ich habe die .rpm Dateien von Epson direkt installiert, aber sonst nichts. Nachdem ich im Terminal...
  2. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  3. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...
  4. Benötige Hilfe- Dateien vergleichen

    Benötige Hilfe- Dateien vergleichen: Hallo, für eine Arbeit an der Uni muss ich einige viele Bilder miteinander vergleichen, was ich gerne durch eine Automatisierung etwas...
  5. Anfänger braucht Hilfe bei DVB-S Installation

    Anfänger braucht Hilfe bei DVB-S Installation: Hallo, ich habe ein Problem. Ich habe openSuse 13.2 frisch installiert. Jetzt soll ein usb-TV-Modul TEVII s660 funktionieren. Ich kann bereits...