shell script

#1
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
 
#3
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 ^^
 

piet

New Member
#5
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
 

piet

New Member
#7
@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 :)
 

Werbung

Top