2013-05-16 113 views
0

我有一个bash的功能,说foo()解析bash函数参数

我传递一些参数,像user=user1 pass=pwd address=addr1 other= 参数可能会遗漏或随机序列 传递一个字符串我需要分配内部foo

适当的值
USER=... 
PASSWORD=... 
ADDRESS=... 

我该怎么办?

我可以使用grep多次,但这种方式并不好,如

foo() 
{ 
    #for USER 
    for par in $* ; do 
    USER=`echo $par | grep '^user='` 
    USER=${USER#*=} 
    done 
    #for PASSWORD 
    for ... 
} 

回答

0

这是什么意思?

#!/bin/sh 
# usage: sh tes.sh username password addr 

# Define foo 
# [0]foo [1]user [2]passwd [3]addr 
foo() { 
    user=$1 
    passwd=$2 
    addr=$3 
    echo ${user} ${passwd} ${addr} 
} 

# Call foo 
foo $1 $2 $3 

结果:

$ sh test.sh username password address not a data 
username password address 

你的问题也已经在这里回答:

Passing parameters to a Bash function


显然,上面的回答是不相关的问题,所以 这个怎么样?

#!/bin/sh 

IN="user=user pass=passwd other= another=what?" 

arr=$(echo $IN | tr " " "\n") 

for x in $arr 
do 
    IFS== 
    set $x 
    [ $1 = "another" ] && echo "another = ${2}" 
    [ $1 = "pass" ] && echo "password = ${2}" 
    [ $1 = "other" ] && echo "other = ${2}" 
    [ $1 = "user" ] && echo "username = ${2}" 
done 

结果:

$ sh test.sh 
username = user 
password = passwd 
other = 
another = what? 
+0

不completelly,设定的参数不严格sequnsed。我可以传递'address = addr1 pass = pwd user = user1 other ='或者只是错过了一些参数。所以USER可能是$ 1或$ 2或者其他 – Torrius

+0

我的不好。但你应该添加这些细节到你的问题 – ardiyu07

+0

我编辑我的答案 – ardiyu07