mein script "ncprof" -> verbesserungsvorschläge

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Ale-x, 19.05.2007.

  1. #1 Ale-x, 19.05.2007
    Zuletzt bearbeitet: 19.05.2007
    Ale-x

    Ale-x bash lehrling

    Dabei seit:
    13.04.2007
    Beiträge:
    109
    Zustimmungen:
    0
    Ort:
    Osnabrück
    ich hab mir nen script gebastelt und hätte gerne verbesserungsvorschläge was man anders machen könnte :) vielleicht kann es sogar der eine oder andere gebrauchen
    http://www.ale-x.com/ncprof
    sollte selbsterklärend sein durch die hilfe????
    Code:
    #!/bin/bash
    #code by ale-x
    #[url]www.ale-x.com[/url]
    #teile verwendet von ifswitch (ge.mine.nu)
    #filename#ncprof
    clear
    ##############auch mit root das script nutzen koennen? dann diesen teil auskommentieren############
    if [ "$USER" = "root" ]
    then
    echo
    echo
    echo
    echo "Du bist als root angemeldet, ein user account wird empfohlen"
    exit
    fi
    ###################################################################################################
    CONFDIR=$HOME/.ncprof/      #kann angepasst werden
    PROFIL=$2                 #nicht aendern
    FILE=$3                   #nicht aendern
    DIR=$4                  #nicht aendern
    LOCALDIR="`pwd`"          #nicht aendern
    
    
    if [ ! -n "`which ncftp`" ] || [ ! -n "`which ncftpput`" ] || [ ! -n "`which ncftpget`" ]   #ncftp installiert?
     then echo sorry
            echo "ncftp not found."
            exit
    fi
    
    ###################################################################
    showprofil()        #profile anzeigen
    {
     echo
     count=0
     echo "Profile:" 
     echo "_____________"
     ls -1 $CONFDIR* | while read line        #CONFDIR einlesen
    
    do 
      count=$[$count +1]
      echo -n "[$count]: "
      grep "name=" $line | awk -F= '{print $2}'
     done
    }
    
    
    
    addprofil()             #profil anlegen
    {
     if [ ! -e $CONFDIR ]
     then
      mkdir $CONFDIR && echo Created CONFDIR:$CONFDIR
     fi
     
     echo
     echo -n "Name (z.b.ale-x)>>"
     read name
     echo "name=$name" >> $CONFDIR/$name
    
     echo -n "Host (z.b.www.ale-x.com>"
     read host
     echo "HOST=$host" >> $CONFDIR/$name
    
     echo -n "Username/loginname>>"
     read user
     echo "USER=$user" >> $CONFDIR/$name
    
    
     echo -n "Passwort>>"
     read pass
      echo "PASS=$pass" >> $CONFDIR/$name
    }
    
    
    download()        #daten von server laden
     {
      
    
    if ! test -e $CONFDIR/$PROFIL  #existiert das profil
     then
      echo "Profil $PROFIL nicht gefunden"
    showprofil
    exit
    fi
    
    echo "Benutze profil $PROFIL"
      USER=`cat $CONFDIR$PROFIL | grep "USER" |  awk -F= '{print $2}'`     #daten aus dem profil holen
      PASS=`cat $CONFDIR$PROFIL | grep "PASS" |  awk -F= '{print $2}'`
      HOST=`cat $CONFDIR$PROFIL | grep "HOST" |  awk -F= '{print $2}'`
      USER=`cat $CONFDIR$PROFIL | grep "USER" |  awk -F= '{print $2}'`
    if [ "$DIR" = "" ]
     then
      DIR="/"
    fi
    
    
    if  test -e $FILE  #existiert die datei ?
     then
      echo "$FILE existiert bereits"
      echo "ACHTUNG BEI FALSCHEINGABE KOENNEN FALSCHE DATEIEN GELOESCHT WERDEN->NAME UEBERPRUEFEN!!!!IST $FILE RICHTIG?"
      echo -n "Datei löschen? j/n:"
      read answer
    
    case $answer in
      j) echo "$FILE geloescht";rm -f $FILE;;
      n) echo "no";clear && exit 1;;
    
     esac
    
    fi
    
    echo "Starte Download von $FILE"
    if ncftpget -u $USER -p $PASS $HOST $LOCALDIR $DIR/$FILE &> /dev/null; then
      echo "$FILE erfolgreich von $HOST geladen"
    exit 0
    else
     echo "Download von $FILE fehlgeschlagen"
    exit
    fi
    }
    
    
    upload()     #daten uploaden
    {
    if ! test -e $CONFDIR/$PROFIL  #existiert das profil
     then
      echo "Profil $PROFIL nicht gefunden"
    showprofil
    exit
    fi
     echo "Starte Upload"
     echo "Benutze profil $PROFIL"
     USER=`cat $CONFDIR$PROFIL | grep "USER" |  awk -F= '{print $2}'` #daten aus dem profil holen
     PASS=`cat $CONFDIR$PROFIL | grep "PASS" |  awk -F= '{print $2}'`
     HOST=`cat $CONFDIR$PROFIL | grep "HOST" |  awk -F= '{print $2}'`
     USER=`cat $CONFDIR$PROFIL | grep "USER" |  awk -F= '{print $2}'`
    
    
    if [ "$DIR" = "" ]
     then
      DIR="/"
    fi
    
    if ! test -e $FILE  #existiert die datei ?
     then
     echo "$FILE existiert nicht"
     exit
    fi
    
     echo "Starte Upload von $FILE"
     if ncftpput -u $USER -p $PASS $HOST $DIR $FILE &> /dev/null; then
      echo "$FILE erfolgreich nach $HOST/$DIR geladen"
      exit 0
    else
     echo "Upload von $FILE fehlgeschlagen"
    exit 1
    fi
    }
    
    
    delprofil()    #profile loeschen
    {
     showprofil
      echo "[e]nde"
      echo -n ">"
      read nr
     
    if [ "$nr" != "q" ] && [ "$nr" != "e" ]       
     then
      rm -f "`ls -1 $CONFDIR/* | head -n $nr | tail -n 1`" && echo "OK" || echo FAILED
     fi
     sleep 1
    }
    
    menu()       #hauptmenue
    {     
     clear
     echo "ncprof - ncftp profiler v0.1"
     echo ""
     echo "[z]eige profile"
     echo "[n]eues profil anlegen"
     echo "[p]rofil loeschen"
     echo ""
     echo "[e]nde"
     echo -n ">"
     read line
    
     if [ "$line" = "" ]
     then   
      line=dummy
     fi
      
     case $line in
      z) showprofil;read moo;;
      n) addprofil;;
      p) delprofil;;
      e) echo "";clear && exit 1;; 
      q) echo "";clear && exit 1;; 
     esac
     
    }
    
    if [ "$1" != "" ]
    then
     if [ "$1" = "-h" ] || [ "$1" = "--help" ]   #hilfe
     then
      echo
      echo "ncprof - ncftp profiler"
      echo "usage: ncprof                               #anlegen,loeschen & zeigen der profile"
      echo "usage: ncprof [-d] [PROFIL] [FILE]          #download ohne verzeichnisangabe ist / default"
      echo "usage: ncprof [-d] [PROFIL] [FILE] [DIR]    #download aus verzeichnisen ins aktuelle verzeichnis"
      echo "usage: ncprof [-p] [PROFIL] [FILE]          #upload ohne verzeichnisangabe ist / default"
      echo "usage: ncprof [-p] [PROFIL] [FILE] [DIR]    #upload aus aktuellen verzeichnis in bestimmtes server verzeichnis"
      echo "usage: ncprof [-s/-show]                    #zeigt alle profile an "
      echo "usage: ncprof [-h/--help]                   #zeigt diese infos "
      echo
      exit -1
     fi
    
     if [ "$1" = "-p" ] #dateien auf den server laden
     then 
     upload
    exit
    fi
    
    
     if [ "$1" = "-d" ] #dateien vom server laden 
     then 
     download
    exit
    fi
    
    
    
    
     if [ "$1" = "-show" ] || [ "$1" = "-s" ]
     then
      showprofil
      echo
      exit 1
     fi
    fi
    
    
    
    while [ 1 ]
    do
     clear
     menu
    done
    
    
    
     
  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 bitmuncher, 19.05.2007
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Feine Sache das, allerdings wäre eine Möglichkeit den FTP-Port anzugeben auch noch recht praktisch. Ich nutze z.B. fast nur FTP-Server, die nicht auf dem Default-Port (21) laufen. Auch wäre es praktisch, wenn man gleich den Ordner angeben könnte, der auf dem FTP-Server genutzt werden soll.

    PS: Mach doch Quelltexte in Zukunft einfach in einen Code- und nicht in einen Quote-Block. Das macht die Sache leichter lesbar und die Einrückungen werden nicht "verschluckt". :)
     
  4. codc

    codc /dev/null

    Dabei seit:
    12.01.2004
    Beiträge:
    607
    Zustimmungen:
    0
    Du solltest noch angeben unter welcher Lizenz du dass veröffentlichtst.
     
  5. Ale-x

    Ale-x bash lehrling

    Dabei seit:
    13.04.2007
    Beiträge:
    109
    Zustimmungen:
    0
    Ort:
    Osnabrück
    inwiefern? also ich könnte da schon irgendwas jetzt hinschreiben aber muss man das immer?
    und wie weiss ich unter welche lizenz das jetzt fällt....sorry hab davon keine plan :')


    @bitmuncher ja das könnte ich noch mit rein machen, das ist nicht drin weil ich immer den standard port nehme :)
     
  6. #5 bitmuncher, 19.05.2007
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Eine Lizenz angeben ist nicht unbedingt notwendig. Die CreativeCommons bietet sich für solche kleinen Sachen aber meist problemlos an: http://creativecommons.org/license/
     
  7. #6 Wolfgang, 19.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ich habe das Skript nur überflogen.
    Aber wenn du wirklich einen Hinweis willst, was ich anders machen würde?
    Let's go
    :oldman
    Solche Dinge wie Passwort sollten ohne echo ausgegeben werden:
    Code:
     echo -n "Passwort>>"
     read pass
    
    Das lässt sich elegant lösen:
    Code:
    read -s -p"Passwort: " pass
    
    -s sorgt für das Unterdrücken des echo.
    -p gibt dir einen Promt aus.

    Desweiteren sind einige useless use of cat drin.

    Beispiel gefällig? ;)
    Code:
    USER=`cat $CONFDIR$PROFIL | grep "USER" |  awk -F= '{print $2}'`
    
    grep nimmt selbst eine Datei als Argument an.
    Rein formal sollten auch die Backticks durch $(..) ersetzt werden.
    Code:
    USER="$( grep "USER" $CONFDIR$PROFIL  |  awk -F= '{print $2}')"
    
    Solche Inputs sollten immer ein Fallback oder default haben.
    Falls die Eingabe weder j noch n ist, was dann?
    Und vertippt hat man sich schnell. ;)
    Code:
    case $answer in
      j) echo "$FILE geloescht";rm -f $FILE;;
      n) echo "no";clear && exit 1;;
    
    Noch etwas formales, was deprecated ist:
    Code:
    count=$[$count +1]
    
    Besser
    Code:
    ((count++))
    
    Nimm es nicht persönlich, ist nur als anregende Kritik gemeint.
    Besonders wenn du es Anderen zur Verfügung stellst solltest du auf
    eine gute Kinderstube deines Codes achten.
    ;)

    Ganz grob gesagt: Alle eventuell möglichen Fehler möglichst abfangen.
    (Datei /Verzeichnis existiert, ist erfolgreich angelegt, Usereingaben waren nicht jenseits des Erlaubten...)

    Nun hör ich auf, sonst denkst du noch in will dich abcanceln.
    Nein dein Script ist schon ok. ;)

    Gruß Wolfgang
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. Ale-x

    Ale-x bash lehrling

    Dabei seit:
    13.04.2007
    Beiträge:
    109
    Zustimmungen:
    0
    Ort:
    Osnabrück
    danke für die tipps wolfgang, warum soll ich das persönlich nehmen ich will doch noch was lernen :)

    werd mich gleich dran machen das zu verbessern :)
     
  10. #8 FrankSchmitz, 19.05.2007
    FrankSchmitz

    FrankSchmitz Jungspund

    Dabei seit:
    23.04.2007
    Beiträge:
    23
    Zustimmungen:
    0
    Na, da sag ich auch mal dankeschön!
    Aus den Anmerkungen kann ich auch einiges für eine gute Kinderstube mitnehmen... 8)
     
Thema:

mein script "ncprof" -> verbesserungsvorschläge

Die Seite wird geladen...

mein script "ncprof" -> verbesserungsvorschläge - Ähnliche Themen

  1. Problem bei autostart / Ausführung mit meinem SH-Script

    Problem bei autostart / Ausführung mit meinem SH-Script: Hallo zusammen. Ich habe ein Shellscript gebastelt, das ich gerne via /etc/init.d/ automatisch ausführen würde. Es soll auch wie es mit der...
  2. Mein Script looped

    Mein Script looped: Hi, ich habe folgendes Problem: Ein Script das taeglich mittels CronJob ausgefuehrt. Siehe Code: ### Delete Backups in /var/backup directory...
  3. Backupscript eure Meinung?

    Backupscript eure Meinung?: Hallo, möchte auf einem Webserver folgendes Backupscript per Crontab laufen lassen: (zur Info: unter /Data1/www liegen die Daten vom...
  4. Mit einem script im Forum mein profil ändern

    Mit einem script im Forum mein profil ändern: tach :) ist es möglich das ich mit einem script mein profil im forum ändern kann. vielleicht wenn ich einmal mich eingeloggt habe und dann...
  5. Meine Shellscripte (bashtools)

    Meine Shellscripte (bashtools): Hey Folks, ich weiß das hatten wir ja schon. Aber dann kam der große Unfall und das Thema war weg. Naja ich möchte euch hier also zum zweiten...