如何使用shell脚本从5个数字中获取最大数量

时间:2014-04-14 08:42:48

标签: linux bash shell unix

我试图在shell脚本中找到5个给定数字中最大的数字。我正在使用Bash类别在Ideone.com上测试我的代码。我收到错误

  

运行时错误时间:0.02内存:5312信号:-1

这是代码

read -p "Enter first Number:" n1
read -p "Enter second Number:" n2
read -p "Enter third Number:" n3
read -p "Enter fourth Number:" n4
read -p "Enter fourth Number:" n5
if[ [ n1 -gt n2 ] && [ n1 -gt n2 ] && [ n1 -gt n3 ] && [ n1 -gt n4 ] && [ n1 -gt n5 ]] ; then
      echo "$n1 is a Greatest Number"
elif[ [ n2 -gt n3 ] && [ n2 -gt n3 ] && [ n2 -gt n4 ] && [ n2 -gt n5 ]] ; then
     echo "$n2 is a Greatest Number"
elif[ [ n3 -gt n4 ] && [ n3 -gt n5 ] ] ; then  
     echo "$n3 is a Greatest Number"
elif[ n4 -gt n5 ] ; then  
     echo "$n4 is a Greatest Number"
else
     echo "$n5 is a Greatest Number"
fi

有什么问题?善意的指导

3 个答案:

答案 0 :(得分:2)

看来你的问题是空间。在“if”“elif”之后和“]”之前添加空格

怎么样

echo -e "$n1 \n $n2 \n $n3 \n $n4 \n $n5" | sort -n -r | head -n 1

答案 1 :(得分:1)

您可以更有效地执行此操作,而无需调用sorthead / tail等外部命令:

max2()
{ if (( "$1" > "$2" ))
  then
    echo "$1"
  else
    echo "$2"
  fi
}
max5()
{ tmp1=$(max2 "$1" "$2")
  tmp2=$(max2 "$3" "$4")
  tmp3=$(max2 "$tmp1" "$tmp2")
  echo $(max2 "$tmp3" "$5")
}
m=$(max5 "$n1" "$n2" "$n3" "$n4" "$n5")

如果您知道所有数字都足够小,则可以使用return $n代替echo $n,然后捕获返回代码而不是数字的文字表示。

答案 2 :(得分:1)

这是一个简单的shell函数,用于查找传递的数值参数的最大值:

User                  // Mongoose model
 .find({})
 .populate('tasks')   // Populate referenced attributes
 .exec()              // Executes the query and return Promise

示例:max() { local m="$1" for n in "$@" do [ "$n" -gt "$m" ] && m="$n" done echo "$m" } 返回max 1 3 2