簡體   English   中英

Bash:如何在包含多個條件的while循環中讀取文件?

[英]Bash: How to read file in while loop containing multiple conditions?

在閱讀了大量文檔和多種SO解決方案之后,我仍然無法通過read line命令在while循環中獲得針對多種條件的正確語法。

我嘗試了下面的以下堆棧溢出解決方案,但無濟於事。

Bash腳本,while循環中有多個條件

!/bin/bash

while (( $(read -r line) && "$1" != 1 ))
do
  #Do stuff
done < myFile.txt

我得到的錯誤是((: && 8 != 1 : syntax error: operand expected (error token is "&& 8 != 1 "

還嘗試read -r line而不是將其包裝在$符號中,但仍然無法正常工作。

我哪里做錯了?

編輯:忽略我原始帖子的邏輯。 最終將改變。 我只是想找出正確的語法。

我認為這里的正確語法是:

#!/bin/bash

while read -r line && (( "$1" != 1 ))
do
    # some stuff
done < myFile.txt

如果希望只要read成功就運行循環,則read命令需要移到(( ))之外。 就是說,我不確定您使用的條件,因為$1是傳遞給腳本的第一個參數,在您顯示給我們的腳本中它永遠不會改變。

while循環的語法為while compound_list do_group 1

其中compound_list基本上是任何有效的命令序列。

您當前的嘗試是嘗試保留命令/等。 算術表達式中,這就是為什么您會遇到語法錯誤。 不過, compound_list兩個位都不是算術表達式(第二個可能是,但不一定是)。

所以你想要更多這樣的東西

while read -r line && [ "$1" != 1 ]

或保留算術表達式而不是[像這樣

while read -r line && (( "$1" != 1 ))

話雖如此,正如湯姆·費內奇(Tom Fenech)在對帖子的評論中指出的那樣,您向我們展示的代碼中的任何內容都不會導致$1的值發生變化。 那么測試的那部分到底應該做什么?

您在鏈接的答案中遵循建議的問題是,您沒有注意各種類型的方括號/括號/等。 去了,它們的意思是什么(答案並沒有解釋它們),而且這個問題中的條件都不是命令本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM