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 doesn't allow else if. Instead, use elif.

Also, you need spacing within your [...] expression.

#!/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 に答える