2

私はシェル スクリプトと Linux 自体にかなり慣れていないので、なぜこれが機能しないのかについて非常に混乱しています。私は本当にこれを学びたいので、答えと一緒に説明してくれるととても助かります。とにかくここに私のコードがあります:

      #!/bin/bash
      #
      #Script number 7
      #
      while i in $#;
      do
         if [ $i -gt $@ ]; then max=$i; fi
         if [ $i -lt $@ ]; then min=$i; fi
      done
      echo Max is: $max
      echo Min is: $min

私がする必要があるのは、パラメータのリストを取得し、それらを比較して、最も高い値と最も低い値を持つものを出力することです。ここで何かが完全に欠けているように感じます。私のループに基づいて、リストよりも大きい値を探し、それを最大として割り当てます。次に、最小のものを探して最小として割り当てます。どんな助けも素晴らしいです。前もって感謝します!

4

4 に答える 4

2

構文が少しずれています。次の例を参照してください。

#!/bin/bash


List=(-3 1 2 3 4 5);
max=-999999999;
min=999999999;

  for i in ${List[@]}
  do
     if [[ $i -gt $max ]] 
     then 
         max=$i
     fi
     if [ $i -lt $min ] 
     then
        min=$i
     fi
  done

echo Max is: $max
echo Min is: $min

出力は次のようになります。

Max is: 5
Min is: -3
于 2013-06-27T21:42:30.117 に答える
0

これは、シェルではなく awk のジョブです。

$ cat tst.sh
awk -v argsS="$*" 'BEGIN {

    numArgs = split(argsS,argsA)
    min = max = argsA[1]

    for (idx=2; idx<=numArgs; idx++) {
        arg = argsA[idx]
        min = (arg < min ? arg : min)
        max = (arg > max ? arg : max)
    }

    print "min=",min
    print "max=",max

}'

$ ./tst.sh 3 8 2 9 4
min= 2
max= 9

$ ./tst.sh the quick brown fox jumped        
min= brown
max= the

$ ./tst.sh 3                         
min= 3
max= 3

$ ./tst.sh -2 -5 -1
min= -5
max= -1

数値だけでなく文字列でも機能することに注意してください。無効な入力が提供された場合、「NaN」または好きなものを出力するように簡単にカスタマイズできます。すべての入力が最大値として誤って「0」を出力することはありません。正の数を 1 つだけ指定した場合、数値は最小値として負またはゼロになります (正解として選択したシェル ソリューションで両方のテスト ケースを試してください)。

于 2013-06-27T22:09:09.130 に答える