【问题标题】:line 14: [: 55.5: integer expression expected --shell error第 14 行:[:55.5:整数表达式预期--shell 错误
【发布时间】:2017-07-30 03:33:06
【问题描述】:

第 8,11,14,17 行出现错误。 该程序是

#!/bin/sh

read a      
b=$(grep -i $a TeamScore.txt| awk 'BEGIN{FS =" "}{print ($2+$4)/2}')
echo "the avg is $b"
if [ "$b" -ge 80]                             #line8
then
echo "1st class "
elif [ "$b" -lt 80 ] || [ "$b" -ge 70 ]       #line11
then
echo "2nd class"
elif [ "$b" -lt 70 ] || [ "$b" -ge 60 ]       #line14
then
echo "3rd class"
elif [ "$b" -lt 60 ]                          #line17
then
echo "fail"
else
echo "code not working"
fi

我是 unix 和 shell 脚本的新手,我想知道哪里出了问题,我该如何解决它。TeamScore.txt 包含一个名称和他们的分数表(用于 2 次考试)。

【问题讨论】:

  • 将您的脚本复制粘贴到shellcheck.net 并修复出现的错误。
  • @aicastell test 命令看不到引号,它们是由 shell 处理的。应该没什么区别。
  • 请记住,所有 CLI 参数都是字符串。如果需要,由应用程序将它们解释为数字。

标签: bash shell unix awk sh


【解决方案1】:

问题在于test 命令只能理解整数,但您将b 设置为包含分数的55.5。更改awk 命令以将其向下舍入。

b=$(grep -i $a TeamScore.txt| awk 'BEGIN{FS =" "}{print int(($2+$4)/2)}')

第 8 行的 ] 之前还需要一个空格。

【讨论】:

    【解决方案2】:

    第 8 行:添加一个额外的空格:

    if [ "$b" -ge 80 SPACE_HERE_REQUIRED ]
    

    第11行、第14行和第17行:数字运算符不能与字符串进行比较,所以使用$b而不是"$b",所以例如使用this

    if [ $b -ge 80 ]
    

    代替:

    if [ "$b" -ge 80 ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多