Linux Bash:如何在while循环中读取包含多个条件的文件?

Linux Bash:如何在while循环中读取包含多个条件的文件?,linux,bash,shell,unix,Linux,Bash,Shell,Unix,在阅读了大量文档和多个SO解决方案之后,我仍然无法使用readline命令在while循环中获得多个条件的正确语法 我尝试了下面的堆栈溢出解决方案,但没有成功 /bin/bash 而($(读取-r行)&&“1”!=1)) 做 #做事 完成

在阅读了大量文档和多个SO解决方案之后,我仍然无法使用readline命令在while循环中获得多个条件的正确语法

我尝试了下面的堆栈溢出解决方案,但没有成功

/bin/bash
而($(读取-r行)&&“1”!=1))
做
#做事
完成
我得到的错误是
(:&&8!=1:语法错误:应为操作数(错误标记为“&&8!=1”

还尝试了
read-r行
,而不是将其包装在
$
符号中,但仍然不起作用

我哪里出错了


编辑:忽略我原来帖子的逻辑。这最终会改变。我只是想找出正确的语法。

while
循环的语法是
而复合列表do\u组

其中,
复合列表
基本上是任何有效的命令序列

您当前的尝试是将命令/等粘贴到算术表达式中,这就是您出现语法错误的原因。
复合列表
中的两个位都不是算术表达式(第二个可以是,但不需要是)

所以你想要更像这样的东西

while read -r line && [ "$1" != 1 ]
while read -r line && (( "$1" != 1 ))
或者保留算术表达式而不是像这样的
[

while read -r line && [ "$1" != 1 ]
while read -r line && (( "$1" != 1 ))
话虽如此,正如Tom Fenech在其帖子评论中所指出的,您向我们展示的代码中的任何内容都不会导致
$1
的值发生变化。那么测试的这一部分到底应该做什么呢


根据链接答案中的建议,您遇到的问题是,您没有注意到各种类型的括号/括号/等的位置以及它们的含义(答案没有解释它们)这个问题中没有一个条件是命令本身。

while循环的语法是
while composite\u list do\u group

其中,
复合列表
基本上是任何有效的命令序列

您当前的尝试是将命令/等粘贴到算术表达式中,这就是您出现语法错误的原因。
复合列表
中的两个位都不是算术表达式(第二个可以是,但不需要是)

所以你想要更像这样的东西

while read -r line && [ "$1" != 1 ]
while read -r line && (( "$1" != 1 ))
或者保留算术表达式而不是像这样的
[

while read -r line && [ "$1" != 1 ]
while read -r line && (( "$1" != 1 ))
话虽如此,正如Tom Fenech在其帖子评论中所指出的,您向我们展示的代码中的任何内容都不会导致
$1
的值发生变化。那么测试的这一部分到底应该做什么呢


根据链接答案中的建议,您遇到的问题是,您没有注意到各种类型的括号/括号/等的位置以及它们的含义(答案没有解释它们),问题中的任何条件都不是命令本身。

我认为正确的语法应该是:

#!/bin/bash

while read -r line && (( "$1" != 1 ))
do
    # some stuff
done < myFile.txt
!/bin/bash
读时-r行(“$1”!=1))
做
#一些东西
完成

read
命令需要超出
(())
如果您希望循环在
读取
成功的情况下运行。也就是说,我不确定您使用的条件,因为
$1
是传递到脚本的第一个参数,在您向我们展示的脚本中它永远不会更改。

我认为正确的语法应该是:

#!/bin/bash

while read -r line && (( "$1" != 1 ))
do
    # some stuff
done < myFile.txt
!/bin/bash
读时-r行(“$1”!=1))
做
#一些东西
完成

read
命令需要超出
(())
如果您希望循环在
读取
成功的情况下运行。也就是说,我不确定您使用的条件,因为
$1
是传递给脚本的第一个参数,在您向我们展示的脚本中不会更改。

为什么
$1
的值在这里会更改?不应该是
[“$1”!=“1”]
?对不起,伙计们。请忽略循环内的逻辑(或缺少逻辑)。我只是想知道在多个条件下使用read命令的while循环的语法。为什么
$1
的值会在这里更改?不应该是
[“$1”!=“1”]
?对不起,伙计们,请忽略循环内的逻辑(或缺少逻辑)。我只是想知道一段时间内使用read命令在多个条件下循环的语法。回答很好,非常全面!抱歉,忽略关于循环的逻辑。我刚刚提出了一个蹩脚的示例来理解语法。回答很好,非常全面!抱歉,忽略关于循环的逻辑。我刚刚提出了一个蹩脚的exampe下载语法。@TomFrench非常感谢。有关循环逻辑,请参阅我的编辑。@TomFrench非常感谢。有关循环逻辑,请参阅我的编辑。