#!/bin/bash -x
i=1
while [ "$i" -le 10 ]; do
number[$i]=$((RANDOM%1000+100))
((i += 1))
done
echo "${number[@]}"
largest=${number[0]}
smallest=${number[0]}
for j in "${number[@]}"
do
if [[ "$j" -lt "$smallest" ]]; then
smallest="$j"
fi
if [[ "$j" -gt "$largest" ]]; then
largest="$j"
fi
done
echo "largest element is: $largest"
echo "smallest element is: $smallest"
在这个程序输出中,我得到第一个最小和最大的元素,但我想要第二个元素
答案1
我实际上没有测试你的脚本,但理论上它应该找到最大和最小的。但不是您需要的第二大和第二小。
此外,您的随机数生成器也略有缺陷。它有可能生成一直到 1099 的数字,这不是三位数。
不过,这是我对你的任务的尝试:
#!/usr/bin/env bash
for ((i=0;i<10;i++)); do
numbers+=($(((RANDOM%900)+100)))
done
largest=0
oldlargest=0
smallest=1000
oldsmallest=1000
for n in "${numbers[@]}"; do
if [[ $n -gt $largest ]]; then
oldlargest=$largest
largest=$n
elif [[ $n -gt $oldlargest && $n -lt $largest ]]; then
oldlargest=$n
fi
if [[ $n -lt $smallest ]]; then
oldsmallest=$smallest
smallest=$n
elif [[ $n -lt $oldsmallest && $n -gt $smallest ]]; then
oldsmallest=$n
fi
done
printf 'Second largest is: %d\nSecond smallest is: %d\n' "$oldlargest" "$oldsmallest"
我相信有人可能会找到一种更优雅的方法来做到这一点,但这将跟踪迄今为止最大和最小的数字,以及迄今为止第二大和最小的数字。最后给我们留下两个值。