Shell脚本输出最大

时间:2015-10-10 15:21:59

标签: bash shell bin

如何编写一个脚本,该脚本将接收参数列表并输出最大的数字。如果未提供参数,则输出错误消息。

我编写了以下代码来检查是否没有提供参数,输出错误信息。

#!/bin/bash
if [ "$#" -eq  "0" ]
then
  echo "No arugments supplied"
else
  echo "$# Parameter"

但我不知道如何继续...

3 个答案:

答案 0 :(得分:2)

保持最大电流。循环输入,必要时更新max。最后,你将拥有全球最大值。

未测试:

#!/usr/bin/bash
if [ $# -eq 0 ]; then
    echo "Usage: $0 NUMBERS" >&2
    exit 1;
fi

max="$1"
shift
while [ $# -gt 0 ]; do
    if [ "$1" -gt "$max" ]; then
        max="$1"
    fi
    shift
done

echo "$max"

答案 1 :(得分:1)

使用sort -n(数字)和-r(反向)然后只选择输出的第一行 - 比如

#!/bin/bash
if [ "$#" -eq  "0" ]
then
  echo "No arugments supplied"
else
  echo "$# Parameter"
  for i in $*; do echo ${i}; done | sort -nr | head -1
fi  

现在你遇到的唯一问题是当输入(参数)不是数字时 - 但你没有说明应该发生什么。

答案 2 :(得分:1)

这是你可以实现的伪代码:

  • 将第一个参数保存在名为max
  • 的变量中
  • 绕过params
    • 如果参数大于max,请更新max
  • print max

这是一个打印所有参数的示例循环:

for num; do
    echo $num
done

以下是比较值的示例:

if (( num > max )); then
    echo $num is greater than $max
fi

这应该足以帮助你完成家庭作业。

好吧,因为其他人已经给了你实际的解决方案,这里也是我的:

#!/bin/bash

if (( $# == 0 )); then
    echo "No arugments supplied"
    exit 1
fi

max=$1
for num; do
    if (( num > max )); then
        max=$num
    fi
done

echo $max