2009-08-30 129 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