# shell script



## Dy0nisus (17. Nov. 2007)

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


----------



## sjau (17. Nov. 2007)

wieso nicht:


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


```
#!/bin/bash
$var1 = $1
$var2 = $2
$var3 = $3
$var4 = $4
```


----------



## Dy0nisus (18. Nov. 2007)

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 ^^


----------



## zzoostmy (2. Feb. 2015)

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


----------



## piet (17. Feb. 2015)

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


----------



## wotan2005 (17. Feb. 2015)

Leichengräber, der Thread ist aus dem Jahre *2007*


----------



## piet (17. Feb. 2015)

@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


----------

