city-data.com에서 일부 데이터를 삭제하려고 합니다. 나는 도시와 주를 얻고 싶습니다. 이것이 제가 할 수 있는 일입니다. 하지만 우편번호가 없으면 if/else를 실행할 수 없는 것 같습니다.
baseURL="https://www.city-data.com/zips"
errorResponse=" <title>Page not found - City-Data.com</title>"
location=$( curl -s -dump "$baseURL/$1.html" | grep -i '<title>' | cut -d\( -f2 | cut -d\) -f1 )
if $location = $errorResponse;
then
echo "That zipcode does not exist"
exit 0
else
echo "ZIP code $1 is in " $location
fi
스크립트를 실행하면 다음과 같은 결과가 나타납니다.bash getZipcode.sh 30001
getZipecode.sh: line 10: <title>Page: command not found
ZIP code 30001 is in <title>Page not found - City-Data.com</title>
10번째 줄은 if $location = $errorResponse;
간결성을 위해 대본에 넣었던 작가명과 She-Bang을 삭제한 곳입니다.
누구든지 이 문제를 해결하도록 도와줄 수 있나요?
답변1
귀하의 진술이 잘못되었습니다 if
. 다음을 시도해보세요.
baseURL="https://www.city-data.com/zips"
errorResponse=" <title>Page not found - City-Data.com</title>"
location=$( curl -s -dump "$baseURL/$1.html" | grep -i '<title>' | cut -d\( -f2 | cut -d\) -f1 )
if [ "$location" = "$errorResponse" ];
then
echo "That zipcode does not exist"
exit 0
else
echo "ZIP code $1 is in " $location
fi
문제는 if 문을 실행할 때 프로그램이 변수의 내용을 경로의 시스템 명령인 것처럼 실행하려고 한다는 것입니다.
Bash에서 문자열을 비교하는 방법에 대한 자세한 내용은 다음을 확인하세요.여기.
답변2
대부분의 웹사이트와 마찬가지로 이 사이트는 페이지를 찾을 수 없을 때 404 HTTP 응답 코드를 반환하므로 보다 안정적인 방법으로 이 방법을 사용할 수 있습니다.
export ZIP="$1"
curl -sw '%{http_code} %{errormsg}\n' "https://www.city-data.com/zips/$ZIP.html" |
perl -ne '
$location = $1 if m{<title>.*?\((.*?)\)};
if (eof) {
if (/^(\d+) (.*)/) {
if ($1 eq "200") {
if (defined($location)) {
print "ZIP code $ENV{ZIP} is in $location\n"
} else {
die "Can'\''t find location in the HTML\n";
}
} elsif ($1 eq "404") {
die "That ZIP code does not exist\n"
} else {
die "HTTP error: $2\n"
}
} else {
die "curl did not return an HTTP code\n"
}
}'
의 해석은 HTTP POST 요청 데이터로 전달되는 -dump
or 와 동일합니다 . curl
HTML 페이지의 텍스트 렌더링을 덤프하는 // 옵션에 대해 혼동하셔야 합니다. 웹 브라우저가 아니고 HTML 렌더링을 수행하지 않으며, 수행하더라도 출력에서 찾을 수 없습니다.-d ump
--data ump
ump
-dump
lynx
elinks
w3m
curl
<title>
HTTP 요청을 수행하는 데 이미 을 사용하는 perl
대신 을 사용하고 있으므로 모듈을 curl
사용할 수도 있습니다 . 그러면 오류 상황을 훨씬 더 쉽고 깔끔하게 처리할 수 있습니다.perl
LWP