0
#!/bin/bash
if [$# -ne 1];
then
  echo "/root/script.sh a|b"
else if [$1 ='a'];
then
  echo "b"
else if [$1 ='b']; then
  echo "a"
else 
  echo "/root/script.sh a|b"
fi

在 Linux 中运行上面的脚本时出现以下错误。

bar.sh: line 2: [: S#: integer expression expected
a

你能帮忙消除这个错误吗?

4

2 回答 2

5
if [$# -ne 1];

[并且]需要间距。例子:

if [ $# -ne 1 ];

并且else if应该是elif

#!/bin/bash
if [ "$#" -ne 1 ];
then
  echo "/root/script.sh a|b"
elif [ "$1" ='a' ];
then
  echo "b"
elif [ "$1" ='b' ]; then
  echo "a"
else
  echo "/root/script.sh a|b"
fi

不要忘记引用变量。不是每次都需要,但推荐。

问题:为什么我有-1?

于 2012-07-22T18:20:02.257 回答
2

Bash 不允许else if。相反,使用elif.

此外,您需要在[...]表达式中留出间距。

#!/bin/bash
if [ $# -ne 1 ];
then
  echo "/root/script.sh a|b"
elif [ $1 ='a' ];
then
  echo "b"
elif [ $1 ='b' ]; then
  echo "a"
else 
  echo "/root/script.sh a|b"
fi
于 2012-07-22T18:26:45.690 回答