出现这个情况,一般就是语法或者结构有问题。比如我们要进行两个变量val1和val2的加减乘除取余等运算,我们需要在运算符前后都加上空格,不然就会出现expr: syntax error这个错误。具体我们看一个下面的一个例子。
#!/bin/bash
read -p "please input two numbers " val1 val2
num=`expr val1 +val2`
echo $num
运行结果如下:
pzy@ubuntu:~/shell$ chmod 740 read.sh
pzy@ubuntu:~/shell$ ./read.sh
please input two numbers 1 2
expr: syntax error
我们第一次运行这个程序时需要加上chmod 740 脚本文件,是为了给这个程序一个读的权限。如果我们再在加号后面加上一个空格,这个语法错误就没有了,程序就正常了。正常程序如下。
#!/bin/bash
read -p "please input two numbers " val1 val2
num=`expr $val1 + $val2`
echo $num
运行结果如下:
pzy@ubuntu:~/shell$ chmod 740 read.sh
pzy@ubuntu:~/shell$ ./read.sh
please input two numbers 1 2
3
还有一个我今天遇到的一个,也会出现这个语法错误。具体请看下面这个代码。
#!/bin/bash
read -p "please input two numbers " val1 val2
add=`expr $val1 + $val2`
sub=`expr $val1 - $val2`
echo $add
echo $sub
mul=`expr $val1 * $val2`
div=`expr $val1 / $val2`
echo $mul
echo $div
mod=`expr $val1 % $val2`
echo $mod
运行结果如下:
please input two numbers 5 3
8
2
expr: syntax error
1
2
出现这个的原因就是在这个乘法运算这个地方,为啥跟C语言不一样呢?这个不是乘法?我们查阅资料发现这个是属于shell里面的元字符,它代表的是任意字符串。我们知道这个的意义就需要修改它,我请教了老师,这个只需用一个反义符就可以屏蔽掉*元字符的作用,使其变成乘法运算符。正确程序如下:
#!/bin/bash
read -p "please input two numbers " val1 val2
add=`expr $val1 + $val2`
sub=`expr $val1 - $val2`
echo $add
echo $sub
mul=`expr $val1 \* $val2`//shell 里面规定的乘法(\*)
div=`expr $val1 / $val2`
echo $mul
echo $div
mod=`expr $val1 % $val2`
echo $mod
运行结果如下:
please input two numbers 5 3
8
2
15
1
2
这个程序还可以这样修改,更加直观一点。程序如下:
#!/bin/bash
read -p "please input two numbers " val1 val2
add=`expr $val1 + $val2`
sub=`expr $val1 - $val2`
echo `expr $val1+$val2=$add`
echo `expr $val1-$val2=$sub`
mul=`expr $val1 \* $val2`
div=`expr $val1 / $val2`
echo `expr $val1\*$val2=$mul`
echo `expr $val1/$val2=$div`
mod=`expr $val1 % $val2`
echo `expr $val1%$val2=$mod`
运行结果如下:
pzy@ubuntu:~/shell$ ./read.sh
please input two numbers 5 3
5+3=8
5-3=2
5*3=15
5/3=1
5%3=2
如果我们把代码稍微修改一下,注意我只修改了最后一个取余运算作比较,代码如下,给大家做一个参考。
#!/bin/bash
read -p "please input two numbers " val1 val2
add=`expr $val1 + $val2`
sub=`expr $val1 - $val2`
echo `expr $val1+$val2=$add`
echo `expr $val1-$val2=$sub`
mul=`expr $val1 \* $val2`
div=`expr $val1 / $val2`
echo `expr $val1\*$val2=$mul`
echo `expr $val1/$val2=$div`
mod=`expr $val1 % $val2`
echo `expr $val1%$val2=$mod`
echo $mod=`expr $val1%$val2`
echo `$mod=expr $val1%$val2`
运行结果如下:
please input two numbers 5 3
5+3=8
5-3=2
5*3=15
5/3=1
5%3=2
2=5%3
./read.sh: line 15: 2=expr: command not found
最后一行代码有问题。这个是做个参考,避免像我这样的小白踩坑。