2017-06-14 148 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。 –