4

配列についてはよくわかりませんが、配列の最大値と最小値を見つけて出力する方法を知る必要があります。配列は読み取りコマンドによって事前定義されており、ユーザーはn個の整数を入力するように求められます。

読み取り入力を配列に割り当て、配列の最大値と最小値を見つけて表示するにはどうすればよいですか?

配列要素をテストして、それらがすべて整数であるかどうかを確認する方法はありますか?

#!/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"
4

3 に答える 3

9

一般的な考え方は、アレイを1回繰り返し、各ステップでこれまでに見たmaxものを追跡することです。min

いくつかのコメントと説明がインラインで(接頭辞は#

# 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"
于 2012-11-29T20:49:43.230 に答える
6

INTegersを比較する必要がある場合(署名されているかどうかに関係なく) 、これを試してください。

#!/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"

出力

min=-10
max=5

説明

于 2012-11-29T20:53:59.510 に答える
3

ソートを使用した面白い方法:

整数の配列がある場合はsort、それを並べ替えてから、次のように最初と最後の要素を選択して最小要素と最大要素を指定できます。

{ read min; max=$(tail -n1); } < <(printf "%s\n" "${array[@]}" | sort -n)

したがって、たとえば10個の整数の入力をユーザーに求める場合は、ユーザーが整数を入力したことを確認してから、次のようにします。

#!/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"
于 2012-11-29T21:14:54.103 に答える