2009-08-30 91 views
1

[編輯]我總結了答案,下面的下面的錯誤在於行:傳遞BASH參數

[編輯] 如果[$ 1 $東北值]。然後


我想傳遞一個值的命令:

#!/bin/bash 
for value in $(mycommand $1) 
do 
    echo Found $value 
    if [$1 ne $value]; then 
     echo No match! 
    if 
done 

但是,如果我在鍵入以下命令來執行腳本:

#./myscript 25 

我得到的錯誤:

Found somestuff 
./myscript: 25: command not found 

我想要做的是傳遞腳本的第一個參數(上例中的「25」)並將其發送到命令'mycommand'。

我該怎麼做?

回答

1

這是完整的myscript?我想你的腳本編寫,並沒有得到這樣的錯誤:

$ ./myscript.sh 25 
Found somestuff 
$ 

如果我添加一個$1到腳本的末尾:

$ ./myscript.sh 25 
Found somestuff 
./myscript.sh: line 6: 25: command not found 
$ 

更新您的編輯:當使用[命令,需要添加一些額外的空間,並且還使用-ne

if [ $1 -ne $value ]; then 

[命令常常實現爲軟或硬鏈接到test命令,例如:

$ ls -l `which [` 
lrwxr-xr-x 1 root  root   4 May 16 2006 /usr/bin/[ -> test 

的手冊頁test會給有關有效表達式的更多信息。

+0

你botha重新改正我的腳本張貼不完整。 – Jamie 2009-08-31 00:07:03

+0

感謝您提供「ls -l」其中的['] - 它指向一個busybox implmentation。 是否有另一種構造可以用作'if'語句,我可以用它作爲替代? – Jamie 2009-08-31 00:32:59

+0

感謝您的幫助。我會發布我的答案... – Jamie 2009-08-31 00:34:58

0

我沒有發現該腳本的任何問題。

$ more x 
#!/bin/bash 
for value in $(echo $1) 
do 
    echo Found $value 
done 
$ sh x 28 
Found 28 
$ 

什麼是mycommand?

0

格雷格我指出了正確的方向,即:

  • if語句周圍添加[]空間,我不知道他們是命令
  • 程序測試不採取' ne'作爲論點。

我的修正後的腳本是:

!/bin/bash 
for value in $(mycommand $1) 
do 
    echo Found $value 
    if [ $1 != $value ]; then 
     echo No match! 
    if 
done 

非常感謝。

+0

在「ne」之前加一個連字符,這樣你就擁有了'-ne'。另外請參閱Bash'man'頁面和http://mywiki.wooledge.org/BashFAQ/031,其中的原因是[['優於'['尤其是關於引用參數的引用減少。 – 2009-08-31 00:51:20