【问题标题】:I am getting error in nested elif statement in shell scripting我在 shell 脚本中的嵌套 elif 语句中遇到错误
【发布时间】:2021-12-10 07:11:36
【问题描述】:

我正在准备用于比较 3 个数字的 shell 代码。 我的代码如下

#!/bin/bash

echo "enter any 3 numbers"
read num1
read num2
read num3

if [ $num1 -gt $num2 ]
  then
     if [ $num1 -gt $num3 ]
      then 
        echo "$num3 is greater than $num1 & $num1"
      fi
elif [ $num2 -gt $num1 ]
  then 
     if [ $num2 -gt $num3 ]
      then 
         echo "$num2 is greater than $num1 & $num3"
     fi
elif [ $num3 -gt $num1 ]
  then
     if [ $num3 -gt $num2 ]
       then
         echo "$num3 is greater then $num2 &$num1"
     fi
else
   echo "invalid"
fi
  

如果我输入第 1 个或第 2 个最高数字,那么它给出了正确的输出,但是如果我输入第 3 个最高数字,它就不会被评估。第二个 elif 语句不会被评估。

【问题讨论】:

    标签: linux bash shell nested sh


    【解决方案1】:

    让我们首先让它更具可读性:

    if [ $num1 -gt $num2 ]; then
        if [ $num1 -gt $num3 ]; then
            echo "$num1 is greater than $num2 & $num3" # typos fixed
        fi
    elif [ $num2 -gt $num1 ]; then
        if [ $num2 -gt $num3 ]; then
            echo "$num2 is greater than $num1 & $num3"
        fi
    elif [ $num3 -gt $num1 ]; then
        if [ $num3 -gt $num2 ]; then
            echo "$num3 is greater then $num1 & $num2" # typos fixed
        fi
    else
        echo "invalid"
    fi
    

    如果您输入例如num1 == 1num2 == 2num3 == 3,那么它就不起作用了,因为这是true

    elif [ $num2 -gt $num1 ]; then
    

    但在那之后,这是错误

    if [ $num2 -gt $num3 ]; then
    

    因此没有输出。 不会继续执行 elif [ $num3 -gt $num1 ]; then 如果这是您所期望的,如果不是那样工作。


    你可以这样重组它:

    if [ $num1 -gt $num2 ] && [ $num1 -gt $num3 ]; then
        echo "$num1 is greater than $num2 & $num3"
    elif ...
    

    并继续添加elifs,直到涵盖所有可能的排列和情况。

    【讨论】:

      【解决方案2】:

      如果您一次只进行两次比较,这会简单得多:

      if [ "$num1" -gt "$num2" ] && [ "$num1" -gt "$num3" ]; then
          echo "$num1 is greater than $num2 and $num3"
      elif [ "$num2" -gt "$num1" ] && [ "$num2" -gt "$num3" ]; then
          echo "$num2 is greater than $num1 and $num3"
      elif [ "$num3" -gt "$num1" ] && [ "$num3" -gt "$num2" ]; then
          echo "$num3 is greater than $num1 and $num2"
      # else echo "no one number is biggest"
      fi
      

      【讨论】:

        猜你喜欢
        • 2019-06-10
        • 1970-01-01
        • 2022-01-14
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多