Bash脚本检测当前分钟奇偶性时出现命令未找到及整数表达式错误的问题排查
Bash脚本检测当前分钟奇偶性时出现命令未找到及整数表达式错误的问题排查
看起来你的脚本里有两个关键小问题导致了报错,我来帮你逐一分析和修正:
第一个错误:expr命令的语法问题
你写的r=expr$n%2``里,expr命令和它的参数之间、参数与运算符之间都必须要有空格——shell是靠空格来识别命令和参数的。你把expr、$n、%2连在一起写,shell会把它当成一个完整的命令名(比如当前分钟是04时,就会识别成expr04%2),而这个命令根本不存在,所以会报command not found。
正确的写法应该是:
r=`expr $n % 2` # 或者更推荐用$()的写法,可读性更好: r=$(expr $n % 2)
第二个错误:if判断中未引用变量
你写的if [ r -eq 0 ]里,r是变量,但你没有加$符号,shell会把它当成一个普通字符串"r",而不是变量存储的数值,自然无法进行整数比较,所以会报integer expression expected。
正确的写法应该是:
if [ $r -eq 0 ]
修正后的完整脚本
把这两个问题修复后,你的脚本就能正常运行了,完整代码如下:
#!/bin/bash n=$(date +"%M") r=$(expr $n % 2) if [ $r -eq 0 ] then echo "Even minute" else echo "Odd minute" fi
另外还有个小建议:其实你可以不用单独定义r变量,直接在if判断里计算,让脚本更简洁:
#!/bin/bash if [ $(expr $(date +"%M") % 2) -eq 0 ] then echo "Even minute" else echo "Odd minute" fi
备注:内容来源于stack exchange,提问作者freetoair
相关产品推荐
相关产品推荐

