shell script

Dieses Thema im Forum "Server Administration" wurde erstellt von Dy0nisus, 17. Nov. 2007.

  1. Dy0nisus

    Dy0nisus New Member

    Hallo zusammen!

    Ich bin gerade dabei ein shell-script zu bauen ... dabei hab ich ein Problem ...


    Es soll einen Parameter geben, der mit einer Zeichenkette in dem Format: "x,x,x,x" gefüttert wird. Also z.b. myscript.sh -n "1,2,3,4,"

    Wie hole ich mir aus dem Argument $2 nun die einzelnen Ziffern heraus?

    Viele Grüße

    Dennis
     
  2. sjau

    sjau New Member

    wieso nicht:

    Code:
    sh myscript.sh var1 var2 var3 var4
    
    und dann:

    Code:
    #!/bin/bash
    $var1 = $1
    $var2 = $2
    $var3 = $3
    $var4 = $4
    
     
  3. Dy0nisus

    Dy0nisus New Member

    weil aus einer anwendung diese art von parameterübergabe kommt und nicht veränderbar ist ... von daher muß ich die zeichenkette in die einzelnen ziffern zerlegen ^^
     
  4. zzoostmy

    zzoostmy New Member

    Wie hole ich mir aus dem Argument $2 nun die einzelnen Ziffern heraus?
     
  5. piet

    piet New Member

    Hi Dy0nisus,
    ich hab mir für solche Zwecke ne Funktion geschrieben, die das erledigt:

    declare -r TRUE=0 false=0
    declare -r FALSE=1 true=1
    ##################################################################
    # function Token c1 n [c2]
    # return nth token in c1 string devided by optional c2 delimiter
    # standart delimiter is a space (" ")
    # standart token is the last (0)
    ##################################################################
    function Token()
    {
    local _nLoopVal # loop value
    local _nLoop=0 # loop counter
    local _cString="${1}" # string to split (c1)
    [ -z "${_cString}" ] && return $FALSE # react on empty string
    local _nTok="${2-0}" # which Token is called (standart 0/last token)
    IFS="${3-$' \t'}" # delimiter to parameter3 or standart value space and tab

    # run thru the string
    for _nLoopVal in ${_cString}; do
    # if last token forced -> go thru complete loop
    [ "$_nTok" == 0 ] && continue
    (( _nLoop++ ))
    [ "${_nLoop}" == "${_nTok}" ] && ( echo "${_nLoopVal}"; unset IFS; return $TRUE )
    done
    # if last token forced -> give it
    [ "$_nTok" == 0 ] && ( echo "${_nLoopVal}"; unset IFS; return $TRUE )

    # release the delimiter var
    unset IFS
    # go back if not
    return $FALSE
    }
    # eo function Token
    ##################################################################

    den gesamten kursiven-Block einfach vor Deinen Code einfügen . . .

    damit könntest Du die einzelnen Werte in Deinem Code auslesen z.B. mit:
    cZweiterWert=$(Token "$2" '2' ',')
    echo $cZweiterWert
    > 2 <

    piet
     
  6. wotan2005

    wotan2005 Member

    Leichengräber, der Thread ist aus dem Jahre 2007
     
  7. piet

    piet New Member

    @wotan2005 für die Aktualität des Boards kann ich nix. Nach dem Thread hatte er noch keine Antwort . . . und vielleicht lebt er ja noch. Wollte nur helfen, wenn das hier nicht erwünscht ist, halte ich mich da in Zukunft raus . . .
    danke für den Hinweis :)
     

Diese Seite empfehlen