如何使用shell脚本获得5个数字中最大的数字

我试图从shell脚本中的5个给定的数字中find最大的数字。 我正在testing我的代码Ideone.com在Bash类别。 我收到错误

运行时错误时间: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 

问题是什么? 亲切指导

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

那怎么样

 echo -e "$n1 \n $n2 \n $n3 \n $n4 \n $n5" | sort -n -r | head -n 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 ,然后捕获返回码而不是数字的文本表示。

下面是一个简单的shell函数,用于从传递的数字参数中查找最大值:

 max() { local m="$1" for n in "$@" do [ "$n" -gt "$m" ] && m="$n" done echo "$m" } 

示例: max 1 3 2返回3