여기에서 작동하는 튜토리얼을 읽었습니다.
while read line
do
wget -x "http://someurl.com/${line}.pdf" -o ${line}.pdf
done < inputfile
그러나 스크립트는 계속 실행되며 $line에는 값이 없습니다. 다음 줄이 비어 있거나 "신호" 단어가 나타나는 경우 스크립트가 중지되는 코드를 어떻게 변경할 수 있습니까?
당신의 도움을 주셔서 감사합니다
답변1
다음은 길이 값 0에서 while 루프를 중지하는 방법입니다 line
.
#!/usr/bin/bash
while read line
do
if [[ -z $line ]]
then
exit
fi
wget -x "http://someurl.com/${line}.pdf"
done < inputfile
실제 문제는 "http" 앞의 일치하지 않는 큰따옴표 문자 또는 "inputfile" 끝에 있는 일치하지 않는 백틱 문자에 있을 수 있다고 생각합니다. 내 코드 예제를 시도하기 전에 참조를 정리해야 합니다.
답변2
while read line && [ "$line" != "quit" ]; do # ...
아니면 빈 줄에서 멈추세요:
while read line && [ "$line" != "" ]; do # ...
또는
while read line && [ -n "$line" ]; do # ...
다양한 주제:
"http://someurl.com/$line.pdf" -o "$line.pdf"
중괄호는 필요하지 않지만 마지막 변수 확장 주위에는 큰따옴표를 사용해야 합니다.
답변3
line=\ ; PS4='${#line}: + '
while read line <&$((${#line}?0:3))
do : "$line"
done <<msg 3</dev/null
one nice thing about allowing shell expansions to self test
is that the shell already has mechanisms in place for the
evaluation. its doing it all the time anyway. theres almost
nothing for you to do but to let it fall into place.
For example:
${line##*[ :: i doubt very seriously the shell will read any of this :: ]*}
msg
1: + read line
59: + : 'one nice thing about allowing shell expansions to self test'
59: + read line
58: + : 'is that the shell already has mechanisms in place for the'
58: + read line
59: + : 'evaluation. its doing it all the time anyway. theres almost'
59: + read line
52: + : 'nothing for you to do but to let it fall into place.'
52: + read line
12: + : 'For example:'
12: + read line
0: + : ''
0: + read line
아니면 빈 줄을 읽은 후 바로 휴식을 취하세요...
while read line && ${line:+":"} break
do : stuff
done
...잘 작동할 거예요.