2011-06-07 230 views
5

我一直在谷歌上看了很长一段时间,找不到任何与我需要/想要做的事情相匹配的东西。修改参数传递给脚本(Bash)

我的目标是编写一个带有两个参数的脚本。它将搜索第一个参数(这是一个列表)并检测第二个参数是否已经在其中。例如:

列表= /斌/富:/斌/随机:随机

要添加到列表:/斌/ foobar的

调用脚本会产生/斌/ foo的结果: /斌/ random:随意:/斌/ foobar的。

如果要添加到列表中的部分已经在列表中,则原始内容将不会更改。

我有一切工作,直到我想修改我传递的参数。

... 
if [ $RUN = 1 ]; then 
    echo $1 
else 
    $1="$NEWLIST" 
fi 
exit 0 

然而这产生了一个错误。它表示找不到命令,并给出了$ 1 =“$ NEWLIST”所在的行号。我在这里做错了什么?我如何修改$ 1?谢谢!

编辑:

$ PATH=/opt/bin:$PATH 
$ ./scrip.sh PATH /user/opt/bin 
$ /opt/bin:/user/opt/bin 

这就是我想为脚本的结果。

回答

2

adymitruk已经说过了,但是你为什么要分配给一个参数。这不是诀窍吗?

if `echo :$1: | grep ":$2:" 1>/dev/null 2>&1` 
then 
    echo $1 
else 
    echo $1:$2 
fi 

也许这:

list="1:2:3:4" 
list=`./script $list 5`;echo $list 

BIG编辑:从您的外壳

if ! `echo :${!1}: | grep ":$2:" 1>/dev/null 2>&1` 
then 
    export $1=${!1}:$2 
fi 

和来源:

使用该脚本(称为listadd例如)。结果如下(我希望这是WSA意):

[email protected]:~$ list=1:2:3:4 
[email protected]:~$ source listadd list 3 
[email protected]:~$ echo $list 
1:2:3:4 
[email protected]:~$ source listadd list 5 
[email protected]:~$ echo $list 
1:2:3:4:5 
[email protected]:~$ list2=a:b:c 
[email protected]:~$ source listadd list2 a 
[email protected]:~$ echo $list2 
a:b:c 
[email protected]:~$ source listadd list2 d 
[email protected]:~$ echo $list2 
a:b:c:d 
+0

hrmm也许我留下了一些东西。脚本被调用后我想要发生的事情是,每当我回显列表时,我希望它也显示脚本所做的修改。这有道理吗?所以如果我有 list =“1:2:3:4” ./script list 5 程序会回显结果。然后每次我打电话 回波列表 1:2:3:4:5 会导致。 – yaegerbomb 2011-06-07 06:09:15

+0

您必须将'-q'添加到'grep' – 2011-06-07 06:09:29

+0

@Op De Cirkel。我不认为设备null会很在乎。或者我错过了什么? – Hyperboreus 2011-06-07 06:12:40

2

首先你的参数复制到局部变量:

Arg1=$1 

然后,你在哪里分配的变量名的$离开关到

你不能有一个$的=左在作业的左侧。如果你这样做,它的解释$ 1的内容作为一个命令来运行

希望这有助于

8

要设置位置参数$1, $2, ...,使用set命令:

set foo bar baz 
echo "$*" # ==> foo bar baz 
echo $1  # ==> foo 

set abc def 
echo "$*" # ==> abc def 

如果要修改一个位置参数不失其他人,首先将它们存储在一个阵列中:

set foo bar baz 
args=("[email protected]") 
args[1]="BAR" 
set "${args[@]}" 
echo "$*" # ==> foo BAR baz 
+1

这是一个保存程序,但是,我建议使用“set - ”来缓解第一个参数以短划线开头时的问题。 – galaxy 2014-07-12 06:27:27

+0

这不应该是公认的答案吗? – 2015-11-19 03:17:05