【问题标题】:Error in my shell script whit parameter argument in in input [closed]我的shell脚本中的错误,输入中有参数参数[关闭]
【发布时间】:2014-05-28 12:17:20
【问题描述】:

像运行我的 shell 脚本 (/bin/sh)

./test.sh wf1 wf2 wf3

产生以下错误:

[: missing `]'

这是我的代码:

[...]
string="HELLO"

for i in "$@" ;do
        if [ "$i" -eq "ciao"]; then
                echo "$stringa" > $i
        fi
done
[...]

为什么?

【问题讨论】:

  • [] 周围需要空格。只需[ "$i" -eq "ciao" ]
  • @fedorqui Spaces 是的,但这不起作用 - ciao 不是整数 ;-)
  • with [ "$i" -eq "ciao" ] 我有这个错误:[: ciao: integer expression expected
  • 正如@AdrianFrühwirth 正确指出的那样,您需要对字符串进行字符串比较:[ "$i" == "ciao" ]。相反,您使用的是指整数比较的-eq
  • 另外,请注意,在上面的测试命令之后有一个反引号 (`)。反引号保留用于命令替换 - 如果你真的希望它作为你的第三个参数的一部分,它必须被转义: wf3\' 可能只是一个错字。

标签: bash shell unix sh


【解决方案1】:

[] 字符是 Bash 中的实际命令,而不仅仅是分隔符。它们需要它们之间的空格和一个变量,就像任何其他命令一样。此外,您需要使用字符串比较器而不是数字比较器。改变这个:

if [ "$i" -eq "ciao"]

到这里:

if [ "$i" == "ciao" ]

只是为了好玩,尝试运行man [[ 字符在括号内的表达式上运行 test 命令。

【讨论】:

  • 使用[ ... = ... ] (POSIX) 或[[ ... == ... ]] 但不要将单括号表示法与== 混合使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 2015-06-02
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多