Shell Skript erzeugt Fehler - hab keinen Plan

E

-eraz-

Tripel-As
Hi Leute,

angehängtes Skript erzeugt folgenden Fehler:
Code:
Sind diese Eingaben korrekt? (j/n)

./netconfig.sh: line 56: [: =: unary operator expected
./netconfig.sh: line 95: unexpected EOF while looking for matching `"'
./netconfig.sh: line 103: syntax error: unexpected end of file
[root@xxx ~]#

Das Skript soll Netzwerkeinstellungen setzen (Ip-Adresse, Netmask etc.) aber ich hab keinen Plan warum das nicht funktioniert. :think:

PS: Handelt sich um ein RedHat v5
 

Anhänge

  • netconfig.zip
    1,1 KB · Aufrufe: 7
Schaustu hier.
Usereingaben in einem test-Konstrukt nicht zu quoten ist fahrlässig. Ändere das erstmal und schau, ob die anderen Meldungen nicht eventuell Artefakte dieses Problems sind..

Code:
     1  #!/bin/bash
     2  clear
     3  echo =================================================================
     4  echo                                                                 
     5  echo                            Willkommen!                          
     6  echo    Bitte geben Sie in nachfolgenden Abfragen die Daten der      
     7  echo    Netzwerkverbindung wie IP-Adresse, Netmask, Gateway etc. ein.     
     8  echo 
     9  echo    Achten Sie auf eine korrekte Eingabe. Sollten Sie sich       
    10  echo    vertippt haben, wird das Skript neu gestartet und Sie müssen
    11  echo    die Daten erneut eingeben.     
    12  echo                                                                 
    13  echo =================================================================
    14  read -p "Drücken Sie 'ENTER' Taste um fortzufahren..."
    15  clear
    16  
    17  echo "IP-Adresse eingeben:"
    18  read IP
    19  
    20  echo "Gateway eingeben:"
    21  read GATEWAY
    22  
    23  echo "Hostname eingeben (inkl. DNS suffix):"
    24  read HOSTNAME
    25  
    26  echo "Primären DNS eingeben:"
    27  read DNS1
    28  
    29  echo "Sekundären DNS eingeben:"
    30  read DNS2
    31  
    32  echo "MAC Adresse eingeben (Format 00:00:00:00:00:00):"
    33  read MAC
    34  
    35  echo "Netzmaske eingeben:"
    36  read NETMASK
    37  
    38  clear
    39  echo
    40  echo "Bitte überprüfen Sie ihre Eingaben:"
    41  echo ====================================
    42  echo
    43  echo IP-Adresse         = $IP
    44  echo Gateway            = $GATEWAY
    45  echo Hostname           = $HOSTNAME
    46  echo Primärer DNS       = $DNS1
    47  echo Sekundärer DNS     = $DNS2
    48  echo MAC-Adresse        = $MAC
    49  echo Netzwerkmaske      = $NETMASK
    50  echo
    51  echo ====================================
    52  echo
    53  echo "Sind diese Eingaben korrekt? (j/n)"
    54  read EINGABE
    55  
    56  if [ $EINGABE = "J" ];then
    57     EINGABE=j
    58  fi
    59  
    60  if [ $EINGABE = "j" ]; then
    61     echo "Konfiguration wird übernommen..."
    62  #       #######################
    63  #       Bearbeite resolv.conf
    64  #       #######################
    65          SUFFIX=$(echo $HOSTNAME | cut -c 9-20)
    66          echo $SUFFIX > /etc/resolv.conf
    67          echo "nameserver $DNS1" >> /etc/resolv.conf
    68          echo "nameserver $DNS2" >> /etc/resolv.conf
    69  
    70  #       #######################
    71  #       Bearbeite network
    72  #       #######################
    73          echo "NETWORKING=yes" > /etc/sysconfig/network
    74          echo "NETWORKING_IPV6=no" >> /etc/sysconfig/network
    75          echo "HOSTNAME=$HOSTNAME" >> /etc/sysconfig/network
    76          echo "GATEWAY=$GATEWAY" >> /etc/sysconfig/network
    77  
    78  #       #######################
    79  #       Bearbeite ifcfg-eth0
    80  #       #######################
    81          echo "# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]" > /etc/sysconfig/network-scripts/ifcfg-eth0
    82          echo "DEVICE=eth0" >> /etc/sysconfig/network-scripts/ifcfg-eth0
    83          echo "BOOTPROTO=static >> /etc/sysconfig/network-scripts/ifcfg-eth0
    84          echo "BROADCAST=" >> /etc/sysconfig/network-scripts/ifcfg-eth0
    85          echo "HWADDR=$MAC" >> /etc/sysconfig/network-scripts/ifcfg-eth0
    86          echo "IPADDR=$IP" >> /etc/sysconfig/network-scripts/ifcfg-eth0
    87          echo "NETMASK=$NETMASK" >> /etc/sysconfig/network-scripts/ifcfg-eth0
    88          echo "NETWORK=" >> /etc/sysconfig/network-scripts/ifcfg-eth0
    89          echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
    90  
    91  #       Starte Netzwerkdienst neu
    92          service network restart 
    93  else
    94     clear
    95     read -p "Sie haben NEIN gewählt, drücken Sie ENTER um das Skript neu zu starten"
    96     ./netconfig.sh
    97  fi
    98  
    99  exit
   100  
   101  
   102
Außerdem ist es imho angebrachter den Code direkt im Forum zu posten. Dann können auch nicht-Registrierte und Faule den Code direkt skimmen...

btw: die Zeilen 43-49 machen sehr wahrscheinlich nicht das, was du willst. Die bash parst die cli in einzelne Wörter. Wobei ein Wort ein Klumpen aus Nicht-whitespace-chars ist. Willst du die spaces escapen und damit die Formatierung beibehalten, dann musst du auch hier quotes benutzen.
 
Also, zum einen würde ich hier die erste Variable auch in "" setzen:

Code:
if [ "$EINGABE" = "J" ];then 
   EINGABE=j 
fi 
 
if [ "$EINGABE" = "j" ]; then
Zweitens hast du bei den echo's am Ende (also in Zeile 83) ein "" vergessen:
Code:
    echo "BOOTPROTO=static >> /etc/sysconfig/network-scripts/ifcfg-eth0

/Edit: oh, viel zu spät auf "Speichern" geklickt... oh, und ausserdem, stimmt, da fehlen jede menge ""...
 
Zuletzt bearbeitet:
Danke für Eure Tipps, funktioniert jetzt. :)

Hat jemand von Euch vll noch ne geniale Idee, wie ich mir anhand der Eingaben Netz- und Broadcastadresse ausrechnen kann?
 
Zuletzt bearbeitet:
Zurück
Oben