【问题标题】:bash while loop not exiting and not echoingbash while 循环不退出也不回显
【发布时间】:2013-08-26 15:52:52
【问题描述】:

所以我有这个 bash 脚本

function exec_do(){
while [[ 1 ]]; do
  read _INPUT
  if [$_INPUT -eq "exit"]
  then
    break
  else
    echo $_INPUT
  fi
done
}

这样做的目的是,如果我输入 exec_do,它会执行一个 while 循环,读取输入并根据输入执行操作。

如果输入为exit,则退出while循环

如果输入没有退出,那么它会回显它

但是当我运行exec_do 然后输入input 它反而返回input: command not found 此外,输入“exit”不会中断循环,也不会返回未找到的命令

我做错了什么,我该如何解决?

【问题讨论】:

    标签: linux bash shell terminal while-loop


    【解决方案1】:

    您对_$INPUT 的比较是一个字符串,那么您需要==。如果比较整数,则需要-eq。如果字符串可能包含空格或元字符,还要双引号 $_INPUT 变量。

    #!/bin/bash  
    
    function exec_do(){ 
      while [[ 1 ]]; do  
        read _INPUT
        if[ "$_INPUT" == "exit" ]; then
          break
        else
          echo $_INPUT
        fi 
      done
      }
    
    exec_do
    

    【讨论】:

    • 很好的修复,特别是如果 bash 将始终是运行脚本的 shell。如果需要更简单/旧 shell 的可移植性(比如 ash 或 ksh),则可能需要旧语法:[ ] 而不是 [[ ]],没有 function 关键字,= 而不是 ==。跨度>
    • 由于 OP 有 bash 作为他问题的标签,我假设他只使用那个 shell。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多