2011-06-07 173 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