【问题标题】:While loop in a shell script gives error : [: too many arguments. How to resolve this issue?shell脚本中的while循环给出错误:[:参数太多。如何解决这个问题?
【发布时间】:2020-11-24 18:35:32
【问题描述】:
function read_num(){
            echo "Enter a lower limit"
            read lower_limit
            echo "Enter a upper limit"
            read upper_limit
            while [ [ $lower_limit -lt 1 ] || [ $lower_limit -gt $upper_limit ] ]
            do
            echo "Please enter again."
            read_num
            done 
        }
    
    read_num

当我输入两个数字的下限和上限时,它会给出以下输出。

check.sh: line 6: [: too many arguments 

第6行是while循环

while [ [ $lower_limit -lt 1 ] || [ $lower_limit -gt $upper_limit ] ]

【问题讨论】:

  • 去掉外面的方括号。 [ ] 表达式不嵌套,您不能在 [ ] 测试表达式中使用 ||(但您可以在它们之间 使用)。这几乎是 this question 的重复项(对于如何进行测试,几乎没有其他选项)。
  • [ 是一个命令。您正在尝试使用参数[$lower_limit-lt1] 调用[ 命令。这争论太多了。如果您使用test 而不是[,则可以轻松避免此类错误。作为语法的一部分,它不太可能被混淆。
  • 除了语法错误,你拼错了read uper_limit - 应该是upper_limit - 否则你会进入无限递归调用。

标签: bash shell unix sh


【解决方案1】:

给你,这对我有用:

#!/bin/bash

function read_num(){
    echo "Enter a lower limit"
    read lower_limit
    echo "Enter a upper limit"
    read uper_limit
    while [[ $lower_limit -lt 1 ]] || [[ $lower_limit -gt $upper_limit ]]
    do
    echo "Please enter again."
    read_num
    done
}

read_num

参考:Bash scripting, multiple conditions in while loop

【讨论】:

  • 您好,请务必提供有关此解决方案如何更正提交的 OP 问题的说明。这里的一个很好的描述是 OP 的代码 sn-p 出了什么问题,以及您如何在答案中解决这些问题。
  • 如果您要使用bash 扩展,请使用(( lower_limit < 1 || lower_limit > upper_limit))。几乎没有理由使用-lt 等。 [[ ... ]].
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多