修改参数传递给脚本(Bash)
我一直在谷歌上看了很长一段时间,找不到任何与我需要/想要做的事情相匹配的东西。修改参数传递给脚本(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
这就是我想为脚本的结果。
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
首先你的参数复制到局部变量:
Arg1=$1
然后,你在哪里分配的变量名的$离开关到
你不能有一个$的=左在作业的左侧。如果你这样做,它的解释$ 1的内容作为一个命令来运行
希望这有助于
要设置位置参数$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
这是一个保存程序,但是,我建议使用“set - ”来缓解第一个参数以短划线开头时的问题。 – galaxy 2014-07-12 06:27:27
这不应该是公认的答案吗? – 2015-11-19 03:17:05
hrmm也许我留下了一些东西。脚本被调用后我想要发生的事情是,每当我回显列表时,我希望它也显示脚本所做的修改。这有道理吗?所以如果我有 list =“1:2:3:4” ./script list 5 程序会回显结果。然后每次我打电话 回波列表 1:2:3:4:5 会导致。 – yaegerbomb 2011-06-07 06:09:15
您必须将'-q'添加到'grep' – 2011-06-07 06:09:29
@Op De Cirkel。我不认为设备null会很在乎。或者我错过了什么? – Hyperboreus 2011-06-07 06:12:40