Nach Variable fragen wenn die nicht als Parameter eingegeben wurde

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von satriani, 23.03.2013.

  1. #1 satriani, 23.03.2013
    satriani

    satriani SysLion

    Dabei seit:
    20.04.2011
    Beiträge:
    39
    Zustimmungen:
    0
    Hallo,

    wie man aus dem Titel entnehmen kann, möchte ich dass man nach Argument gefragt wird, wenn man keinen eingetippt hat. zB
    statt
    und hier der Code:

    Code:
    #!/bin/sh
    
    list_fu() {
              bu_response=$2
              if [ -z "$bu_response" ]; then
                read -r -p "Enter blabla: " bu_response
              fi
    
              for data in $bu_response
              do
                ...............
              done
    }
    
    backup_fu() {
              bu_response=$2
              if [ -z "$bu_response" ]; then
                read -r -p "Enter blabla: " bu_response
              fi
    
              for data in $bu_response
                do
                  .............
              done
    }
    
    BU_RESPONSE=$2
    
    if [ "$#" -lt "1" ]
    then
    	show_usage
    	exit 1
    fi
    
    action="show_usage"
    
    while [ "$#" -gt "0" ]
    do
    	case ${1} in
    		-l|list)
    			action="list_fu"
    			shift
    			;;
    		-b)
    			action="backup_fu"
    			shift
    			;;
    	esac
    done
    
    case ${action} in
    	list_fu)
                    preparation
    		list_fu $BU_RESPONSE
    		;;
    	backup_fu)
                    preparation
    		backup_fu $BU_RESPONSE
    		;;
    esac
    
    exit 0
    Wenn man kein Parameter definiert, dann fragt er danach, soweit so gut. Doch wenn man den bzw. die Parameter eintippt, dann passiert einfach nichts.
    Ich sehe den Wald vor lauter Bäumen nicht :D

    Danke im Voraus.
     
  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 Gast123, 23.03.2013
    Zuletzt von einem Moderator bearbeitet: 23.03.2013
    Gast123

    Gast123 Guest

    Du müsstest für jede Action eine flag einbauen, der angibt, ob die jeweilige Option spezifiziert wurde.
    Am besten machst du das mit Boole'schen Werten, die du setzt, falls eine entsprechende Konfiguration gewählt oder abgewählt wurde.
    Wenn du die Flags mit NULL initialisierst, kannst du auch noch prüfen, ob eine der beiden zuvorgenannten Optionen gewählt wurde.
    Bsp:
    Code:
    #! /bin/bash
    
    MACH_WAS=
    
    while (( $# )); do
    	case $1 in
    		--mach-was)	MACH_WAS=true
    		;;
    		--mach-nichts)	MACH_WAS=false
    	esac
    	shift
    done
    
    if [ -z "$MACH_WAS" ]; then
    	echo -n "Soll ich nun was machen oder nicht? [y/N]: "
    	read SOLL_ICH_WAS_MACHEN
    	shopt -s nocasematch
    	case $SOLL_ICH_WAS_MACHEN in
    		y|yes)	MACH_WAS=true
    		;;
    		*)	MACH_WAS=false
    	esac
    	shopt -u nocasematch
    fi
    
    if ( $MACH_WAS ); then
    	echo "Ich mache dann mal was"
    else
    	echo "Ich mache dann mal nichts"
    fi
    
    Edit:
    Ich sehe gerade, dass du den Funktionen list_fu und backup_fu jeweils $BU_RESPONSE als ersten Parameter übergibst, in den jeweiligen Funktionen, aber die Variable $bu_response auf den jeweils zweiten Parameter setzt. Ich nehme an, dass das nicht gewollt ist.
    Warum definierst du überhaupt noch zwei zusätzliche Variablen $bu_response in den Funktionen, wenn du diese, wie dem Skript zu entnehmen ist ja nie belegst und den zweiten Parameter Ja schon in $BU_RESPONSE stehen hast.
    Des weiteren würde das Skript wegen deinem while / case -Loop in eine Endlosschleife laufen, wenn man andere Parameter als -s, -list oder -b übergibt.
    Vielleicht solltest du, bevor du programmierst, dir mal überlegen, was du überhaupt machen willst.

    MfG

    Schard
     
  4. #3 satriani, 25.03.2013
    satriani

    satriani SysLion

    Dabei seit:
    20.04.2011
    Beiträge:
    39
    Zustimmungen:
    0
    Danke Schard, wie immer flott und hilfsbereit ;)
    Aber, das ist ja eine ganz andere Struktur die du mir vorschlägst, außerdem kennt FreeBSD "shopt" gar nicht.

    Also, ich muss ja eine Variable für die Schleife definieren und wenn man die nicht in Form eines Parameters eingibt, dann soll danach gefragt werden. Aber das ganze soll nach rechts verschoben werden, praktisch alles was nach
    kommt, muss als $bu_response definiert werden.
     
  5. #4 Gast123, 25.03.2013
    Gast123

    Gast123 Guest

    Oha, also benutzt du FreeBSD und die olle Bourne shell? Na, gut! :D
    Ich muss aber sagen, dass ich die genauen beschränkungen der Bourne Shell nicht kenne, da ich fast nur bash-Skripte erstelle.
    Du musst es also eventuell anpassen.

    Wenn ich dich richtig verstehe, soll entweder -l oder -b spezifiziert werden, und was jeweils danach kommt, die BU_RESPONSE sein.
    Und falls nichts der beiden spezifiziert wird, soll nach der auszuführenden Operation gefragt werden.
    Dann könnte das hier weiter helfen:

    Code:
    while [ "$#" -gt "0" ]
    do
    	case ${1} in
    		-l|list)
    			action="list_fu"
    			shift
    			BU_RESPONSE="$@"
    			break
    			;;
    		-b)
    			action="backup_fu"
    			shift
    			BU_RESPONSE="$@"
    			break
    			;;
    		# Sonst...
    		*)	echo -n "Please specify -l ot -b: "
    			read ANSWER
    			$0 $ASWER $@
    	esac
    done
    
    Aber dann könntest du dir auch die Schleife sparen.
    Erklär doch bitte mal, was du da eigentlich machen willst (s. mein erster Post).
     
  6. #5 satriani, 25.03.2013
    Zuletzt bearbeitet: 25.03.2013
    satriani

    satriani SysLion

    Dabei seit:
    20.04.2011
    Beiträge:
    39
    Zustimmungen:
    0
    Backup Script von ZFS Datasets, den man mit cron ausführen kann, etwa so
    oder manuell
    -l ist zum auflisten der vorhandenen Backups und -r zum wiederherstellen. Das wars :)

    Edit: OK, habs endlich hinbekommen. Danke Schard, du warst mir eine große Hilfe :respekt: :gn8:
     
Thema:

Nach Variable fragen wenn die nicht als Parameter eingegeben wurde

Die Seite wird geladen...

Nach Variable fragen wenn die nicht als Parameter eingegeben wurde - Ähnliche Themen

  1. Textstring nach muster durchsuchen und in Variable speichern

    Textstring nach muster durchsuchen und in Variable speichern: Hallo, habe ein "kleines" Problem! ps -ef | grep mysql | grep GroupLabel | grep -v grep liefert: root 4298 1 0 Nov13 ? 00:00:00...
  2. Variable nach Scriptausführung speichern

    Variable nach Scriptausführung speichern: Hallo. Ich will den Wert der Variable NEW_X mit der Wert der Variablen OLD_X vergleichen. Beim ersten Skriptaufruf wird NEW_X der selbe Wert...
  3. Nach Muster in Datei suchen und durch Variable ersetzen

    Nach Muster in Datei suchen und durch Variable ersetzen: Hallo, ich bekomme es einfach nicht hin, ich will in meinem Script eine Datei durchsuchen nach ${xxxxx} und die dann durch eine Variable mit dem...
  4. variable von einem script zum nächsten übergeben

    variable von einem script zum nächsten übergeben: ich versuche gerade ein script zu basteln dass mehrere unterscripte anschmeisst. dabei wollte ich aber im ersten script alle variablen...
  5. string.split() nach variabler anzahl an leerzeichen

    string.split() nach variabler anzahl an leerzeichen: hallo leute.. ja dumme frau sucht schnelle antwort. ich hab ein kleines problem mit der funktion string.split(). und zwar möchte ich die...