linux下运行shell脚本出现expr: syntax error的情况解决办法

出现这个情况,一般就是语法或者结构有问题。比如我们要进行两个变量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

最后一行代码有问题。这个是做个参考,避免像我这样的小白踩坑。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值