2017-06-14 150 views
1

我的代碼如下是一個任務的一部分,但是我對付桌面不知道爲什麼它不會分配「MIN」值。我嘗試將MIN和MAX分配給$ {LIST [0]},只是爲了使第一個索引就位,但它返回整個數組,這對我來說沒有意義。我在CentOS虛擬機上執行此操作(我看不出有什麼不同)。我知道第一個和第二個「if」語句的開頭需要更好的邏輯,但我更關心MIN和MAX輸出。Unix腳本 - 查找最小值和最大值(Bash Shell)

#!/bin/bash 
LIST=() 

read -p "Enter a set of numbers. " LIST 

MIN= 
MAX= 

if [ ${#LIST[*]} == 0 ]; then echo "More numbers are needed."; fi 

if [ ${#LIST[@]} -gt 0 ]; then 
     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. 

fi 
+0

您需要檢查什麼類型的LIST是什麼?您將其設置爲空數組,然後使用讀取來分配標量值。您需要包含-a開關以讀取以將LIST維護爲數組 – grail

回答

0

該代碼幾乎功能正常。

  1. 由於$ LIST是一個數組,不是一個變量,改變read -p "Enter a set of numbers. " LIST到:

    read -p "Enter a set of numbers. " -a LIST

  2. 向下移動$ MIN$ MAX初始化代碼5條線,(就在for環路之前):

    MIN= 
    MAX= 
    

    ...並將其更改爲:

    MIN=${LIST[0]} 
    MAX=$MIN 
    

,它會工作。測試:

echo 3 5 6 | ./minmax.sh 

輸出:

Max is: 6. 
Min is: 3. 
+0

我喜歡此解決方案。我最初在我的MIN邏輯中添加了一個OR(.. || MIN -eq「」),並且它解決了。我沒有記住的是,用於其他編程語言的是,這些是字符串文字而不是整數。它爲什麼$ {LIST [0]}打印出整個設置數字(或單個字符串)是有意義的。謝謝,@agc。 –