在 shell 脚本中读取行 - 如何停止循环?

use*_*469 4 shell-script

我在这里阅读了一个教程,我可以使用

while read line
do 
wget -x "http://someurl.com/${line}.pdf" -o ${line}.pdf
done < inputfile
Run Code Online (Sandbox Code Playgroud)

但是,此脚本继续以不包含任何值的 $line 运行。如果下一行为空或出现某些“信号”字,我该如何更改脚本停止的代码。

感谢您的帮助

Bru*_*ger 5

以下是在零长度值上停止 while 循环的方法line

#!/usr/bin/bash
while read line
do
    if [[ -z $line ]]
    then
         exit
    fi
    wget -x "http://someurl.com/${line}.pdf" 
done < inputfile
Run Code Online (Sandbox Code Playgroud)

我认为您真正的问题可能在于“http”之前不匹配的双引号字符,或者“inputfile”末尾不匹配的反引号字符。在尝试我的代码示例之前,您应该清理引用。


PSk*_*cik 5

 while read line && [ "$line" != "quit" ]; do # ...
Run Code Online (Sandbox Code Playgroud)

或者停在空行处:

 while read line && [ "$line" != "" ]; do # ...
Run Code Online (Sandbox Code Playgroud)

或者

 while read line && [ -n "$line" ]; do # ...
Run Code Online (Sandbox Code Playgroud)

关于不同的主题:

"http://someurl.com/$line.pdf" -o "$line.pdf"
Run Code Online (Sandbox Code Playgroud)

您不需要花括号,但您应该在最后一个变量扩展周围使用双引号。