首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Linux shell脚本中,如何打印数组的最大值和最小值?

在Linux shell脚本中,如何打印数组的最大值和最小值?
EN

Stack Overflow用户
提问于 2012-11-30 04:46:23
回答 3查看 37.2K关注 0票数 4

我真的不太了解数组,但我需要知道如何查找和打印数组的最大值和最小值。该数组是由读取命令预定义的,系统将提示用户输入n个整数。

如何将读取输入分配给数组,并查找和显示数组的最大值和最小值?

有没有一种方法可以测试数组元素,看看它们是否都是整数?

代码语言:javascript
运行
复制
#!/bin/bash

read -a integers

biggest=${integers[0]}
smallest=${integers[0]}

for i in ${integers[@]}
do
     if [[ $i -gt $biggest ]]
     then
        biggest="$i"
     fi

     if [[ $i -lt $smallest ]]
     then
        smallest="$i"
     fi
done

echo "The largest number is $biggest"
echo "The smallest number is $smallest"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-30 04:49:43

一般的想法是遍历数组一次,并跟踪到目前为止maxmin在每个步骤中看到的内容。

内联的一些注释和解释(前缀为#)

代码语言:javascript
运行
复制
# This is how to declare / initialize an array:
arrayName=(1 2 3 4 5 6 7)

# Use choose first element of array as initial values for min/max;
# (Defensive programming) - this is a language-agnostic 'gotcha' when
# finding min/max ;)
max=${arrayName[0]}
min=${arrayName[0]}

# Loop through all elements in the array
for i in "${arrayName[@]}"
do
    # Update max if applicable
    if [[ "$i" -gt "$max" ]]; then
        max="$i"
    fi

    # Update min if applicable
    if [[ "$i" -lt "$min" ]]; then
        min="$i"
    fi
done

# Output results:
echo "Max is: $max"
echo "Min is: $min"
票数 9
EN

Stack Overflow用户

发布于 2012-11-30 04:54:00

如果您需要比较(签名或未签名) INTegers

代码语言:javascript
运行
复制
#!/bin/bash

arr=( -10 1 2 3 4 5 )

min=0 max=0

for i in ${arr[@]}; do
    (( $i > max || max == 0)) && max=$i
    (( $i < min || min == 0)) && min=$i
done

echo "min=$min
max=$max"

输出

代码语言:javascript
运行
复制
min=-10
max=5

解释

票数 6
EN

Stack Overflow用户

发布于 2012-11-30 05:14:54

一种有趣的排序方式:

如果您有一个整数数组,则可以使用sort对其进行排序,然后选择第一个和最后一个元素以包含最小和最大元素,如下所示:

代码语言:javascript
运行
复制
{ read min; max=$(tail -n1); } < <(printf "%s\n" "${array[@]}" | sort -n)

因此,如果您想提示用户输入10个整数,请检查用户是否输入了整数,然后对它们进行排序,您可以这样做:

代码语言:javascript
运行
复制
#!/bin/bash

n=10
array=()

while ((n));do
   read -p "[$n] Give me an integer: " i
   [[ $i =~ ^[+-]?[[:digit:]]+$ ]] || continue
   array+=($i)
   ((--n))
done

# Sort the array:
{ read min; max=$(tail -n1); } < <(printf "%s\n" "${array[@]}" | sort -n)
# print min and max elements:
echo "min=$min"
echo "max=$max"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13634429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档