Linux expr给定语法错误

Linux expr给定语法错误,linux,bash,shell,Linux,Bash,Shell,我正在用bash编写一个简单的脚本: #!/bin/bash if [ $# -ne 3 ]; then echo "Usage: $0 number1 operator number2" exit 1 fi opt=$2 case $opt in +) echo "$1 + $3 = `expr $1 + $3`";; -) echo "$1 - $3 = `expr $1 - $3`";; /) echo

我正在用bash编写一个简单的脚本:

#!/bin/bash

if [ $# -ne 3 ]; then
        echo "Usage: $0 number1 operator number2"
        exit 1
fi

opt=$2

case $opt in
        +) echo "$1 + $3 = `expr $1 + $3`";;
        -) echo "$1 - $3 = `expr $1 - $3`";;
        /) echo "$1 / $3 = `expr $1 / $3`";;
        x|X) echo "$1 * $3 = `expr $1 * $3`";;
esac
除了
x | x
1外,所有的案例都很好用。为什么我似乎不明白

运行
/script.sh 20 x 3
时出现的错误是:

expr: syntax error
20 * 3 = 

我是bash脚本新手,所以有没有人知道这方面的解决方案。

您遇到了什么错误?具体是什么输入?您需要引用/转义
*
,以便shell不会将其作为通配符展开。将
set-x
添加到脚本顶部以查看发生了什么。另外,不要使用
expr
。改为使用()。您需要
expr$1\*$3
——根据Etan的建议,将星号转义“内部”没有任何内容
expr
;这是一个类似于
ls
cp
的命令。它获取一系列参数,并将其视为表达式。比较
expr 3+5
expr“3+5”
。在第一种情况下,三个参数可以组合成一个表达式;在第二种情况下,单个参数不能。您得到了什么错误?具体是什么输入?您需要引用/转义
*
,以便shell不会将其作为通配符展开。将
set-x
添加到脚本顶部以查看发生了什么。另外,不要使用
expr
。改为使用()。您需要
expr$1\*$3
——根据Etan的建议,将星号转义“内部”没有任何内容
expr
;这是一个类似于
ls
cp
的命令。它获取一系列参数,并将其视为表达式。比较
expr 3+5
expr“3+5”
。在第一种情况下,三个参数可以组合成一个表达式;在第二种情况下,单个参数不能。
#!/bin/bash

if [ $# -ne 3 ]; then
        echo "Usage: $0 number1 operator number2"
        exit 1
fi

opt=$2

case $opt in
        +) echo "$1 + $3 = `expr $1 + $3`";;
        -) echo "$1 - $3 = `expr $1 - $3`";;
        /) echo "$1 / $3 = `expr $1 / $3`";;
        x|X) echo "$1 * $3 = `expr $1 \* $3`";;
esac